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];


Then use emplace to do the construction:

auto obj = emplace!YourClass(memory, ctor_args...);


GC.malloc can be found in import core.memory; http://dlang.org/phobos/core_memory.html#malloc


Note that you can also use other memory allocators here if you didn't want it gc'd.

Reply via email to