Call destructor directly.
Jonathan M Davis
jmdavisProg at gmx.com
Sun Oct 20 22:16:46 PDT 2013
On Monday, October 21, 2013 05:53:46 Agustin wrote:
> On Monday, 21 October 2013 at 03:50:24 UTC, Agustin wrote:
> > On Monday, 21 October 2013 at 03:46:33 UTC, Jonathan M Davis
> >
> > wrote:
> >> On Monday, October 21, 2013 05:07:02 Agustin wrote:
> >>> What about constructor?. My current code is:
> >>> T allocate(T : Object, A...)(auto ref A arguments) {
> >>>
> >>> auto pMemory = rawAllocate(__traits(classInstanceSize, T),
> >>>
> >>> T.alignof); // Return void*
> >>>
> >>> emplace!T(cast(T *)pMemory, arguments);
> >>> return cast(T) pMemory;
> >>>
> >>> }
> >>>
> >>> Doesn't seems to work, and i can't find any good documentation
> >>> about it.
> >>
> >> IIRC, the constructor should be name __ctor.
> >>
> >> - Jonathan M Davis
> >
> > no property 'opCall' for type 'Main.MyClass' :(
>
> Trait allMember return "__ctor", but seems like i cannot call it
> directly:
>
> (cast(T)pMemory).__ctor(arguments); // Being pMemory void*
If you want to see how to use emplace, I'd advise looking at
std.typecons.RefCounted's implementation:
https://github.com/D-Programming-Language/phobos/blob/master/std/typecons.d#L3505
emplace calls the constructor for you, so I don't know why you'd be trying to
call it. But you can look at emplace's implementation if you want to see how
to call __ctor.
For structs:
https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L3976
For classes:
https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L4716
I don't think that it'll work if the constructor is private though, so maybe
that's your problem.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list