On 12/20/2010 04:00 PM, David Currie wrote:

I am new to D (like many have done C++ , Java ).

Me too. Let's see what we can figure out together :-)


Can a class be instantiated on the stack ?

eg

class C
{
private int _I1;
private int _I2;

public:

this(int pI) // constructor
{
_I1 = pI;
_I2 = pI + 1;
}

// ... other methods etc
}

void f() // just a function
{

C myC(3); // C++ syntax BUT is there a d equivalent

}

It appears that D ASSUMES myC is really a myC*(in C++)

It is not so much a *, but reference semantics (like T& param in C++).


and therefore requires

C myC = new C(3);
// but this ALWAYS requires calling the memory allocator
// this is what Java does (forces your Class instance onto the Heap)

Is there any way in D to instantiate a stack object ?

Not a class object. Only values are on the stack. The reference semantics requires a "living" entity to refer to.


Will a struct do?

Yes, if you so wish, but new also works. Structs have value semantics.


Does a struct have a constructor (as opposed to an opcall?)

You can define one, but you cannot redefine the default this() constructor. Because structs have value semantics, D wants to make sure that T.init member values are slotted in by default. Note that T.init for a class type is the null reference.


I would be very grateful for a response.

Hope this helps a bit.
Cheers,
Joost.


David Currie



Reply via email to