Sean Kelly 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?
You can do this today with both Druntime on D 2.0 and Tango on D 1.0,
though it isn't the most performant approach. The code would look
something like this:
import core.runtime;
interface Disposable
{
void dispose();
}
bool handler( Object o )
{
auto d = cast(Disposable) o;
if( d !is null )
{
d.dispose();
return false;
}
return true;
}
static this()
{
Runtime.collectHandler = &handler;
}
If you return false from your collectHandler then the runtime won't call
the object's dtor.
I raised this enhancement request, below :
http://d.puremagic.com/issues/show_bug.cgi?id=2757
Would this sample code solve these resource management / deterministic
memory management issues ?