Destructor order
Steven Schveighoffer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Mar 18 08:03:14 PDT 2016
On 3/18/16 10:58 AM, Andrea Fontana wrote:
> On Friday, 18 March 2016 at 14:53:20 UTC, Steven Schveighoffer wrote:
>> On 3/18/16 7:44 AM, Nicholas Wilson wrote:
>>> On Friday, 18 March 2016 at 10:20:40 UTC, Temtaime wrote:
>>>> Hi !
>>>> I wonder if i can rely on this code :
>>>>
>>>> http://dpaste.dzfl.pl/745cc5b1cdfb
>>>>
>>>> There's two questions:
>>>> 1) Is dtors always called in reverse order ?
>>> yes
>>>> 2) Is all the dtors always called when i call destroy ?
>>> yes. destroy calls __dtor() which recursively call __dtor() on its
>>> members
>>
>> I think technically not true. If you call __dtor directly, it does not
>> recurse. But this is an implementation detail.
>>
>
> Why doesn't this print ~B ~A?
> http://dpaste.dzfl.pl/0bef0a4316b7
>
> It raises a bug on my code because dtor are called in "wrong" order.
> b holds a ref to a, why a is desctructed before b?
Structs are contained completely within the class instance memory block
(e.g. the OP's code). Classes are references. They are not destroyed
when you destroy the holder, that is left up to the GC, which can
destroy in any order. And in fact, it's a programming error to destroy
any GC-allocated memory inside your dtor, because it may already be gone!
-Steve
More information about the Digitalmars-d-learn
mailing list