Destructor order
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Oct 22 10:13:34 PDT 2014
On Wednesday, 22 October 2014 at 16:55:41 UTC, Regan Heath wrote:
> "The garbage collector is not guaranteed to run the destructor
> for all unreferenced objects. Furthermore, the order in which
> the garbage collector calls destructors for unreference objects
> is not specified. This means that when the garbage collector
> calls a destructor for an object of a class that has members
> that are references to garbage collected objects, those
> references may no longer be valid. This means that destructors
> cannot reference sub objects. This rule does not apply to auto
> objects or objects deleted with the DeleteExpression, as the
> destructor is not being run by the garbage collector, meaning
> all references are valid."
But Scoped!A is on the stack?
So why wasn't the eles' destructor order in reverse if Scoped is
a struct and calls explicit destroy(B) then destroy(A)?
https://github.com/D-Programming-Language/phobos/blob/master/std/typecons.d#L4628
~this()
{
.destroy(Scoped_payload);
}
More information about the Digitalmars-d-learn
mailing list