GC has a "barbaric" destroyng model, I think
Orvid King via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Feb 11 13:40:30 PST 2015
On Wednesday, 11 February 2015 at 21:34:00 UTC, Andrey Derzhavin
wrote:
> If we are using a DMD realization of destroying of
> objects, happens the following: at the calling the «destroy»
> method the calling of dtor takes place always, and then the
> object which is being destroyed is initialized by the default
> state. In other words, after calling «destroy» method, there is
> no way of getting an access to the members of the object that
> is being destroyed (it is meant, that the members are the
> references). GC works the same way.
> This approach in case of manual calling of «destroy» method
> has predictable and understandable consequences (there is no
> reasone to use the object being destroyed). But if GC performes
> the destroying of the objects, a lot of errors appear at the
> accessing to the members which are references, because some of
> them have already been destroyed (access to the members is
> realized in dtors). Such situations can be avoided, by using
> «@nogc» keyword. Howewer «@nogc» keyword doesn't protect us
> from using the references in dtors: we can assign some values
> to the refernces, we can have access to some members by the
> references and assign them some values.That is not correct in
> itself.
>
> If GC starts destroying some group of the objects, it could be
> more correct, if the calls of dtros are occured of all objects
> in a group before phisical memory releasing. Or GC must call
> dtors of the objetcts only, which noone refers to.
The finalization order issue is one that is actually rather
difficult, if not impossible, to solve without a precise GC. It
gets even more complicated when you have to deal with cyclic
references in finalizable allocations.
More information about the Digitalmars-d-learn
mailing list