Georg Wrede wrote: > dsimcha wrote: >> Two closely related topics here: >> >> 1. It is often nice to be able to create a single object that works >> with both >> GC and deterministic memory management. The idea is that, if delete >> is called >> manually, all sub-objects would be freed deterministically, but the >> object >> could still safely be GC'd. Since the destructor called by the GC can't >> reference sub-objects, would it be feasible to have two destructors >> for each >> class, one that is called when delete is invoked manually and another >> that is >> called by the GC? > > This one you already can do. Just write a myDestructor() that does > whatever you need, and then call it when necessary.
Actually, a pattern I stole from C# was dispose. I have a module lying around somewhere that defines a Disposable interface with a void dispose(); method. There's also a mixin that implements much of the logic and boilerplate for you. It also defines void dispose(T)(T) and void destroy(T)(ref T); destroy works like delete except that it will call dispose on the passed value if it can find it. Then I just use destroy everywhere instead of delete, unless it's for a scoped instance in which case I use dispose. -- Daniel