Sven Barth schrieb:
Am 25.10.2014 03:17 schrieb "Hans-Peter Diettrich" <drdiettri...@aol.com
<mailto:drdiettri...@aol.com>>:
>> - a class instance is destroyed once the reference count reaches
zero (and Free does not work for them)
>
>
> Shouldn't Free be usable as a finalizer, clearing all references to
other objects within this instance?
One could do that (for now I've chosen the simple way). One would
however need to check how this would be implemented best (e.g. it should
be marked somehow so that the destructor later on does not try to work
with already finalized fields; also all fields (Strings, arrays,
interfaces, records, etc.) should be finalized so that it is
consistent).
A finalizer must clear all managed fields, otherwise memory management
were corrupted. Doing so may destroy other managed objects, so that
possible consequences must be considered. I wonder whether the sequence
of clearing fields may cause trouble?
Also it needs to be observed how other reference holders
might react to that "zombie" instance.
Right, this should be considered by the developer.
A further problem might be legacy
code which gets passed a reference counted instance (on which ARCIncRef
was called to keep it alive) and which then calls Free. Might not be the
intended result by neither code... This might be the reason of
Embarcadero to implement Free as a no-op and add a new DisposeOf which
does what you suggested.
Then Delphi compatibility has to be maintained. Is DisposeOf fully
automatic, or can it be overridden or otherwise influenced (field
sequence...)?
DoDi
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel