Constructors (starstruck noob from C++)

Jonathan M Davis jmdavisProg at gmx.com
Thu Jan 20 18:53:00 PST 2011


On Thursday, January 20, 2011 17:18:48 Luke J. West wrote:
> Hi to all from a total noob.
> 
> first of all, I'd like to say how impressed I am with D. In fact, I keep
> pinching myself. Have I *really* found a language worth leaving C++ for
> after two decades? It's beginning to look that way. Obviously I'm
> devouring the 2.0 documentation right now, but have not yet found out
> how to create a new instance of an existing class object. What I mean
> is, given...
> 
> auto a = new A;
> 
> how do I, in c++ speak, do the D for...
> 
> A  b(a); // or if you prefer...
> A* b = new A(a);
> 
> I'm sure this must be trivial.
> 
> Many many thanks,

Well, you could create a constructor which is effectively a copy constructor. 
There has been talk of a general cloning mechanism which would give you a 
correct clone method essentially for free, but it hasn't been done yet (not sure 
why; I don't recall exactly where the last discussion on that went other than it 
was generally accepted that we wanted something like that). However, at the 
moment, I'm not aware of any general way to copy a class instance like you're 
trying to do.

Structs have postblit constructors:

this(this)
{
   //...
}

where a shallow copy of the struct is made prior to entering this(this), and 
then you do whatever you need to do inside it to make it a deep copy (or just 
don't have a postblit constructor if you don't need a deep copy). However, 
classes are reference types and don't have anything like that.

So, we need to add a means to generate clone methods for classes so that copying 
classes will be easy, but we haven't done it yet. I'm not sure what the current 
obstacles to doing it are.

- Jonathan M Davis


More information about the Digitalmars-d mailing list