Understanding the GC

monarch_dodra monarchdodra at gmail.com
Wed Jan 30 04:08:06 PST 2013


On Wednesday, 30 January 2013 at 11:57:01 UTC, Maxim Fomin wrote:
> On Wednesday, 30 January 2013 at 10:29:26 UTC, monarch_dodra 
> wrote:
>> On Wednesday, 30 January 2013 at 08:15:15 UTC, Mike Parker 
>> wrote:
>>> Destructors of members will not be called when an object is 
>>> collected. Only that of the object itself. But, there's no 
>>> guarantee that any member references will still be valid when 
>>> the object's destructor is called. See below for more.
>>
>> Just to be clear, I suppose you (both) are talking about 
>> "member references"? EG: Nested classes?
>
> I found calling member class references as nested classes 
> confusing - they are very different.
>
>> Destroying an object 100% guarantees its member destroyers are 
>> also called, outer to inner, first in first out, as part of 
>> the destruction process. The thing is that when you store a 
>> "class reference" then you call the destructor of the 
>> reference itself. References being glorified pointers, it 
>> basically means it does nothing.
>
> Are you implying that in following code snippet:
>
> class A { ~this() { ... } }
> class B { A a; ~this() { ... } }
>
> destructor of A will be always called after B, so "a" member is 
> always accessible in B's dtor?

No. What gave you that idea? I said the "reference" a will be 
destroyed (set to null). The actual referenced "class instance" 
may or may not be destroyed by then. The class instance of A 
itself is not a member of B.


More information about the Digitalmars-d-learn mailing list