On Mon, 07 May 2012 15:08:16 -0400, Mehrdad <[email protected]> wrote:
On Monday, 7 May 2012 at 17:04:08 UTC, Steven Schveighoffer wrote:
Not really, but then again, if you are not placing the class into the
GC heap, who cares? You have to manually delete anyways, just use your
specialized 'delete' function instead of delete.
-Steve
No, I *am* placing it on the heap.
You hadn't made that clear.
In your first post, I was assuming your ptr came from some non-GC
allocated space, which is why you wanted the ability to intercept it.
I'm just asking if I can call the constructor manually, because
(like I wrote in my first post...) sometimes the C code you're
interoperating with takes control away from you, and just calls a
callback on your behalf when constructing the object.
I wasn't sure, but I just tried it out:
import std.stdio;
extern(C) void *_d_newclass(TypeInfo t); // this is defined in
rt/lifetime.d I cheated and used this, because I didn't want to have to
type everything that was in it :)
class C
{
int x;
this(int x){this.x = x;}
}
void main()
{
C c = cast(C)_d_newclass(typeid(C));
c.__ctor(1);
writeln(c.x); // outputs 1
}
Seems to work
-Steve