I think possibly a better solution is to have a "finalize" function, similar to how tango does it, so the dtor is only called from destroy/delete, and the finalize method is called from the GC.
Ugh, so you still have to identify objects before releasing the memory?
Put all objects that need cleanup on a separate GC heap then, to reduce impact.
