Thread overview | |||||
---|---|---|---|---|---|
|
April 24, 2008 classes allocated on the stack | ||||
---|---|---|---|---|
| ||||
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 |
April 24, 2008 Re: classes allocated on the stack | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | 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> |
April 25, 2008 Re: classes allocated on the stack | ||||
---|---|---|---|---|
| ||||
Posted in reply to Frits van Bommel | "Frits van Bommel" wrote
> 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>
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
|
Copyright © 1999-2021 by the D Language Foundation