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