digitalmars.D.learn - Miscelleanous Questions
- Bruno Medeiros (26/26) Aug 09 2005 Miscelleanous questions, here is a load of them. Sorry if some may not
- Jarrett Billingsley (16/37) Aug 09 2005 Array literals for non-static arrays aren't supported yet, unfortunately...
- Bruno Medeiros (13/32) Aug 11 2005 Yes, I understand in that case, but what then if you dont have a derived
- Jarrett Billingsley (9/18) Aug 11 2005 Does it much matter? The performance overhead of a virtual destructor w...
- Bruno Medeiros (7/32) Aug 14 2005 Ahh, I see now, that never had occured to me, but it makes perfect sense...
- Regan Heath (6/11) Aug 09 2005 I don't think so. But if I may suggest a syntax...
Miscelleanous questions, here is a load of them. Sorry if some may not be be truly D specific. :p Is static initialization of fixed-length arrays only permited for static-allocation fixed-length arrays? (what a name mess :o ) Why so? Also is it possible to declare a fixed-length array without directly specifying the size, but instead determining it by the size of the static initializer? Like the following in C: int iar[] = { 1, 2, 8, 7, 2 }; // iar is a fixed-length array of size 5 elements Is there an add/insert function for associative arrays (like there is remove() )? I think I rather prefer it than the "aa[key] = value;" way. CLASSES: "3 It is illegal to refer to this implicitly or explicitly prior to making a constructor call." Huh, how is that even possible to do? CLASSES: "There can be only one destructor per class, the destructor does not have any parameters, and has no attributes. It is always virtual." Why is a destructor allways virtual? MEMORY MANAGEMENT: "The pointer returned from new() must be to memory aligned to the default alignment. This is 8 on win32 systems." 8? On win32 is the alignment not 4 for pointers? MEMORY MANAGEMENT: "The critical features of delete() are: ... The pointer p may be null." What? What sense does it make, deletion with a null pointer? -- Bruno Medeiros Computer Science/Engineering student
Aug 09 2005
"Bruno Medeiros" <daiphoenixNO SPAMlycos.com> wrote in message news:ddb14r$b60$1 digitaldaemon.com...Is static initialization of fixed-length arrays only permited for static-allocation fixed-length arrays? (what a name mess :o ) Why so? Also is it possible to declare a fixed-length array without directly specifying the size, but instead determining it by the size of the static initializer? Like the following in C: int iar[] = { 1, 2, 8, 7, 2 }; // iar is a fixed-length array of size 5 elementsArray literals for non-static arrays aren't supported yet, unfortunately. And I don't think you can make a fixed-length array like that. You can do this: static int[] blah=[1,2,3]; But it'll be a dynamic array.Is there an add/insert function for associative arrays (like there is remove() )? I think I rather prefer it than the "aa[key] = value;" way.I agree with you there, and there has been A LOT of debate over AAs. I think an "add" or "put" function would be very welcome.CLASSES: "3 It is illegal to refer to this implicitly or explicitly prior to making a constructor call." Huh, how is that even possible to do?Maybe it's not ;)CLASSES: "There can be only one destructor per class, the destructor does not have any parameters, and has no attributes. It is always virtual." Why is a destructor allways virtual?Because otherwise, you'd get problems when you destroyed classes that inherited from other classes. Whenever you have a derived class, the dtor should be virtual.MEMORY MANAGEMENT: "The pointer returned from new() must be to memory aligned to the default alignment. This is 8 on win32 systems." 8? On win32 is the alignment not 4 for pointers?I don't know about that one.MEMORY MANAGEMENT: "The critical features of delete() are: ... The pointer p may be null." What? What sense does it make, deletion with a null pointer?Because it's legal. "delete null" is a valid statement. In D (and in C++), calling "delete null" does nothing instead of causing an access violation.
Aug 09 2005
Jarrett Billingsley wrote:"Bruno Medeiros" <daiphoenixNO SPAMlycos.com> wrote in messageYes, I understand in that case, but what then if you dont have a derived class?..CLASSES: "There can be only one destructor per class, the destructor does not have any parameters, and has no attributes. It is always virtual." Why is a destructor allways virtual?Because otherwise, you'd get problems when you destroyed classes that inherited from other classes. Whenever you have a derived class, the dtor should be virtual.I was talking about runtime, not compile-time validity. I think it would be obvious that "delete null;" would be a compile-time valid statement. Turns out we were both wrong and now I really dont know what to think anymore: I tested a "delete null;" and it fails compilation with a "null is not an lvalue" error, but a "int* pt = null; delete pt;" is compilable, and runs without crashing. :S What's the deal after all? -- Bruno Medeiros Computer Science/Engineering studentMEMORY MANAGEMENT: "The critical features of delete() are: ... The pointer p may be null." What? What sense does it make, deletion with a null pointer?Because it's legal. "delete null" is a valid statement. In D (and in C++), calling "delete null" does nothing instead of causing an access violation.
Aug 11 2005
"Bruno Medeiros" <daiphoenixNO SPAMlycos.com> wrote in message news:ddgv49$1ooi$1 digitaldaemon.com...Yes, I understand in that case, but what then if you dont have a derived class?..Does it much matter? The performance overhead of a virtual destructor would be rather small, I'd think. Especially since in larger projects, classes which don't have any derived classes are rare.I was talking about runtime, not compile-time validity. I think it would be obvious that "delete null;" would be a compile-time valid statement. Turns out we were both wrong and now I really dont know what to think anymore: I tested a "delete null;" and it fails compilation with a "null is not an lvalue" error, but a "int* pt = null; delete pt;" is compilable, and runs without crashing. :S What's the deal after all?delete in D does something that it doesn't in C++ - it also sets the pointer that was passed in to null. So writing "delete null" isn't valid, as it'd be like trying to pass a number literal to a function that took an inout int.
Aug 11 2005
Jarrett Billingsley wrote:"Bruno Medeiros" <daiphoenixNO SPAMlycos.com> wrote in message news:ddgv49$1ooi$1 digitaldaemon.com...Well kind of, even if just as a conceptual question.Yes, I understand in that case, but what then if you dont have a derived class?..Does it much matter? The performance overhead of a virtual destructor would be rather small, I'd think. Especially since in larger projects, classes which don't have any derived classes are rare.Ahh, I see now, that never had occured to me, but it makes perfect sense since otherwise there would be GC-related problems. -- Bruno Medeiros Computer Science/Engineering studentI was talking about runtime, not compile-time validity. I think it would be obvious that "delete null;" would be a compile-time valid statement. Turns out we were both wrong and now I really dont know what to think anymore: I tested a "delete null;" and it fails compilation with a "null is not an lvalue" error, but a "int* pt = null; delete pt;" is compilable, and runs without crashing. :S What's the deal after all?delete in D does something that it doesn't in C++ - it also sets the pointer that was passed in to null. So writing "delete null" isn't valid, as it'd be like trying to pass a number literal to a function that took an inout int.
Aug 14 2005
On Tue, 09 Aug 2005 19:45:29 +0000, Bruno Medeiros <daiphoenixNO SPAMlycos.com> wrote:Also is it possible to declare a fixed-length array without directly specifying the size, but instead determining it by the size of the static initializer? Like the following in C: int iar[] = { 1, 2, 8, 7, 2 }; // iar is a fixed-length array of size 5 elementsI don't think so. But if I may suggest a syntax... int iar[$] = [ 1, 2, 8, 7, 2 ]; Makes sense to me as $ means length in slice context. Regan
Aug 09 2005