Picking up this old topic & state.

What's the solution at the moment? I'm a bit lost. Is there now a way to use / make custom alloators with D2 or not?

If yes, how to do it?


On 2009-10-07 21:16:37 +0200, Andrei Alexandrescu said:

So for placement construction of a class, I guess it would look something like:

auto x = cast(MyClass) malloc(MyClass.classinfo.init.length);
x.__ctor( a, b, c ); // construct
...
x.__dtor();
free( cast(void*) x );

Is that right?

Yes, I think so, but I haven't checked all the details. For example I'm not sure whether __ctor copies .init over the memory before running the user-defined constructor, or expects that to have been done already.

My understanding from Walter is that __ctor(x, y, z) are simply the functions this(x, y, z) as written by the user, so you'd need to memcpy the .init by hand before calling __ctor.

Aw hell I got curious so let me check.

class MyClass {
     int x = 42;
     this() {}
}

void main() {
     auto x = cast(MyClass) malloc(MyClass.classinfo.init.length);
     x.__ctor();
     writeln(x.x);
     writeln(x.toString);
}

That prints 0 and then crashes on my machine. Looks like you need to memcpy the .init before calling __ctor.

I'm very glad we're starting to look into this. There are very nice opportunities for adding custom allocation support in the stdlib.


--
Robert M. Münch
http://www.robertmuench.de

Reply via email to