Call destructor directly.
Agustin
agustin.l.alvarez at hotmail.com
Sun Oct 20 22:39:54 PDT 2013
On Monday, 21 October 2013 at 05:17:01 UTC, Jonathan M Davis
wrote:
> 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
I'm silly the issue was at this line
auto pMemory = rawAllocate(__traits(classInstanceSize, T),
T.alignof);
emplace(pMemory, arguments);
Correct was
auto pMemory = rawAllocate(__traits(classInstanceSize, T),
T.alignof);
emplace(&pMemory, arguments);
Thanks guys
More information about the Digitalmars-d-learn
mailing list