Thread overview
classes allocated on the stack
Apr 24, 2008
Frits van Bommel
April 24, 2008
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
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
"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