Newbie initial comments on D language - destructor usage

Bill Baxter dnewsgroup at billbaxter.com
Tue Jan 29 00:29:34 PST 2008


Edward Diener wrote:
> I have a small nit having to do with a general comment which perhaps I
> did not really understand. In the documentation on class destructors I 
> read:
> 
> "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 are no longer valid. This means that destructors cannot
> reference sub objects. This rule does not apply to auto objects or
> objects deleted with the DeleteExpression."

> This comment makes perfect sense up to the last sentence. 

You should have seen it before I asked for it to be rewritten!

> Except for a
> 'scope' class a destructor can not possibly know how it is being called
> so if someone can explain to me how a destructor can know when it is OK
> to reference sub-objects or not, I would love to hear about it. I would
> have thought that referencing sub-objects in a destructor was just
> forbidden unless the class was a 'scope' class and had to reference a
> sub-object to possibly release a non-memory resource. But perhaps I am
> missing the full meaning of the comment and someone can explicate the
> issues involved for me.

All it means is that if for whatever reason you _know_ your destructor 
was called explicitly, and not indirectly by the GC, then you're ok. 
Whether this is of any practical use is another matter.  I guess if you 
always hold explicit references to some set of things, then you know the 
GC isn't going to collect them, so you could write those classes to 
refer to stuff in their destructors.  In other words "careful memory 
management" like BCS said so succinctly.

--bb



More information about the Digitalmars-d mailing list