destructors and GC again

Derek Parnell derek at psyc.ward
Mon Oct 16 07:56:45 PDT 2006


On Mon, 16 Oct 2006 16:36:52 +0200, Lutger wrote:

> Sorry for this topic again, I'm still not exactly sure: when an 
> unreferenced object is collected during the lifetime of your program 
> (before main exits), is the destructor of this object guaranteed to be 
> called? I expect it to be so, as otherwise destructors seem pretty 
> useless (and dangerous), but cannot infer this from the spec.
> 
> The spec says: "The garbage collector is not guaranteed to run the 
> destructor for all unreferenced objects ... The garbage collector calls 
> the destructor function when the object is deleted."
> 
> It's not clear from this to me that IF an object is collected (of which 
> you cannot be sure, ok), what is guaranteed about the destructor. I 
> assume 'deleted' in the spec means that delete is explicitly called, not 
> 'collected by the GC'.

I don't think that it is guaranteed. You need to either explicitly delete
it or use 'auto' (meaning RAII this time).

e.g.

  void somefunc()
  {
    auto MyClass X = new MyClass();
  }

or

  void somefunc()
  {
    MyClass X = new MyClass();
    scope(exit) { delete X; }
  }
    

-- 
Derek Parnell
Melbourne, Australia
"Down with mediocrity!"



More information about the Digitalmars-d-learn mailing list