digitalmars.D.learn - classes allocated on the stack
- Steven Schveighoffer (29/29) Apr 24 2008 Regarding this documentation
- Frits van Bommel (6/11) Apr 24 2008 [snip]
- Steven Schveighoffer (7/18) Apr 24 2008 Ah yes, I hadn't thought of it meaning that. Another case of the exampl...
Regarding this documentation (http://www.digitalmars.com/d/1.0/memory.html#stackclass): <quote> Class instances are normally allocated on the garbage collected heap. However, if they: * are allocated as local symbols in a function * are allocated using new * use new with no arguments * have the scope storage class then they are allocated on the stack. </quote> Why does rule 3 exist? If I have a class: class X { private int n; this() { n = 5; } this(int x) { initialize(x); } initialize(int x) { n = x; } } And I want to allocate an instance on the stack, with n initialized to 3: scope x = new X; // allocated on stack x.initialize(3); scope x2 = new X(3); // allocated on heap? What about using the constructor with parameters makes it not possible to store on the stack? -Steve
Apr 24 2008
Steven Schveighoffer wrote:* use new with no arguments[snip]Why does rule 3 exist? If I have a class:[snip]What about using the constructor with parameters makes it not possible to store on the stack?"New with arguments" != "constructor with parameters". I think you missed this part of the spec: <http://www.digitalmars.com/d/1.0/class.html#ClassAllocator>
Apr 24 2008
"Frits van Bommel" wroteSteven Schveighoffer wrote:Ah yes, I hadn't thought of it meaning that. Another case of the example not being explicit enough :) It would be nice if the counter example (with an example of new with arguments) was listed. I'll post an enhancement report. Thanks! -Steve* use new with no arguments[snip]Why does rule 3 exist? If I have a class:[snip]What about using the constructor with parameters makes it not possible to store on the stack?"New with arguments" != "constructor with parameters". I think you missed this part of the spec: <http://www.digitalmars.com/d/1.0/class.html#ClassAllocator>
Apr 24 2008