Newbie initial comments on D language - destructor usage
Edward Diener
eddielee_no_spam_here at tropicsoft.com
Tue Jan 29 18:55:29 PST 2008
Bill Baxter wrote:
> 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!
<g>
>
>> 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.
What is an 'explicit reference to some set of things' ? Can not the GC
be destroying your object in a cross-reference situation where the
references you hold are no longer guaranteed to exist in the destructor ?
More information about the Digitalmars-d
mailing list