Destructors calling sequence

Maxim Fomin maxim at maxim-fomin.ru
Fri Nov 29 09:17:05 PST 2013


On Friday, 29 November 2013 at 16:48:58 UTC, Temtaime wrote:
> Hi !
> http://dpaste.dzfl.pl/53d9a59e
>
> How i can enforce that ~A will be called after ~B ?
>
> I'm writing 3D engine and it's critical to me.
>
> Thanks for yours aid !

It is impossible to do this directly given current gc 
implementation, but you can do something like that:

class A
{
    bool reset;
    void delegate dtor();
    ~this()
    {
       if (!reset)
          dtor();
    }
}

class B
{
    A a;
    bool run;
    ~this() { if (!run) a.reset = true; run = true; }
}

A a = new A;
B b = new B;
b.a = a;
b.a.dtor = & b.__dtor;


More information about the Digitalmars-d-learn mailing list