Destructors calling sequence
Adam D. Ruppe
destructionator at gmail.com
Fri Nov 29 08:58:43 PST 2013
In this specific case, you can force a collection at the end of
main()
void main() {
auto b = new B;
a = new A;
import core.memory;
GC.collect();
}
The gc runs automatically at the end of the program, but at that
point, both b and a are gone, so the gc just gets to it as soon
as it can. Manually calling collect after you're done with b but
before the program ends (so a is still in use) it should do it in
order.
But, generally, if you want to rely on destructors at all, you
have to use structs, or at least destroy(). They might never run
with classes and the order is undefined - it all depends on when
and if the GC ever actually grabs it.
Thought a struct at module scope might never run its destructor
at all...
More information about the Digitalmars-d-learn
mailing list