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