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

Reply via email to