destructors

Daniel Giddings danielg at microforte.com
Tue May 1 16:43:03 PDT 2007


Daniel Keep wrote:
> 
> 
> Exactly.  You can't.
> 
> Long story short is thus: the *only* thing you can say for sure still
> exists when your destructor is called, is your own object's memory.

Yuck - I never really thought about this. So destructors in D are almost 
as useless as the __del__ method in Python :-(

> Question: what order do the objects get destroyed in?
> Answer: no one knows.
> 
> The problem is that in order for the GC to destroy objects in "the right
> order", it would have to build a complete dependency graph between the
> various objects, then destroy them in the right order.
> 
> But what happens if you've got a *lot* of objects, or those objects
> don't care what order they're destroyed in, or worse: cycles.  If you've
> got cycles, the GC is stuffed, and there *is* no correct order to
> destroy them in.
> 
> There was a thread quite some time ago that demonstrated a hacked
> version of phobos that allowed destructors to take a bool argument that
> told the destructor if the object was being destroyed deterministically
> (ie: via the delete statement, or because the object was scoped) or not.
>  Sadly, it never caught on :(
> 
> 	-- Daniel
> 

The bool would be incredibly handy as you'd be able to still do 
destructor type things safely with explicit deletes.

I suppose an alternative would be something like

class MyClass
{
    OtherClass a;
    this() { a = new OtherClass; }
    MyClass destroy() { delete a; delete this; return null; }
       // is the return null above ok in D? - it seemed ok when run
}

then you'd know when its been explicitly deleted.

MyClass m = new MyClass;
...
m = m.destroy();


More information about the Digitalmars-d-learn mailing list