On Jan 26, 2011, at 4:55 AM, Albin Breen wrote:
> Hi! I've been trying out D recently but I'm a little confused about the order
> in which destructors are called:
>
> class A {
> this() { writeln("ctor"); }
> ~this() { writeln("dtor"); }
>
> static this() { writeln("static ctor"); }
> static ~this() { writeln("static dtor"); }
> }
>
> void main() {
> auto a = new A;
> }
>
> This will output:
> static ctor
> ctor
> static dtor
> dtor
>
> I would have thought that the static destructor should be the last one (in
> case there are static dependencies). Have I missed something?
The static dtors are run when main exits and then the GC terminates, which may
trigger a final collection. In this case, the last "dtor" is when this
collection occurs.