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.

Reply via email to