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.