On 2015-02-08 at 01:20, Mike Parker wrote:
In your case, forget destructors and the destroy method. Just implement a 
common method on all of your objects that need cleanup (perhaps name it 
'terminate') and call that. This gives you the deterministic destruction that 
you want (the same as calling destroy on each object) while avoiding the 
possibility that the GC can call your cleanup method.

What is wrong with doing all that in a destructor? I don't know if it is just 
an implementation detail, but a destroyed object is either zero-filled or 
reinitialized to the default, so, if implemented correctly, it knows whether a 
cleanup is required (and I'm assuming that a model of simple single ownership 
is used, like in Qt). Therefore it should be safe to use destroy to finalize an 
object and even to put destroy in its destructor in order to perform a 
controlled cascade destruction of all the children that require immediate 
cleanup (ie. releasing expensive non-GC resources, closing connections, etc.). 
The main difference with C++ being that you would only force finalization, but 
then let the GC free the memory in its normal fashion.



Reply via email to