Separate allocation and construction?

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 5 16:22:45 PDT 2014


On 06/05/2014 03:47 PM, Chris Williams wrote:
> On Thursday, 5 June 2014 at 22:25:03 UTC, Adam D. Ruppe wrote:
>> On Thursday, 5 June 2014 at 22:22:16 UTC, Chris Williams wrote:
>>> If I wanted to allocate memory for a class and then call its
>>> constructor as two separate steps, while still having the object be
>>> managed by the garbage collector, is there any way to do that?
>>
>>
>> Check out std.conv.emplace
>> http://dlang.org/phobos/std_conv.html#emplace
>>
>> First, allocate the memory block for the class. The size is
>> __traits(classInstanceSize, Yourclass). Then slice it:
>>
>> enum size = __traits(classInstanceSize, YourClass);
>> auto memory = GC.malloc(size)[0 .. size];
>
> Why slice? There seems to be a version of emplace that accepts a
> pointer, which is what GC.malloc() seems to return.

That overload returns a T* but we need a class variable. I think we 
should accept it that it is reserved for non-class types (as the 
documentation also indicates).

Ali



More information about the Digitalmars-d-learn mailing list