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;
relying on to "bool reset" it's no good idea. In this case a manual memory management - good choice.
