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