Separate allocation and construction?

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 5 15:25:02 PDT 2014


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.


More information about the Digitalmars-d-learn mailing list