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.