Destructor nonsense on dlang.org
David Nadlinger
see at klickverbot.at
Thu May 24 10:59:28 PDT 2012
On Thursday, 24 May 2012 at 17:55:02 UTC, Alex Rønne Petersen
wrote:
> I would strongly advise against that, because a missed clear()
> means your finalizer may be run by the runtime's finalization
> machinery, and thus invalidate any invariants you were relying
> on in the finalizer.
Yes – the »correct« way to handle situations where you need
deterministic finalization is to use structs on the stack,
possibly in conjunction with reference counting. Of course, there
are some situations (e.g. when there are cycles) where this
doesn't work, but at least it covers most of the »external
non-memory resource« cases.
Composability can still be a problem, though, because holding a
reference in a (GC-managed) class object might leave you with
exactly the same problem you tried to avoid in the first place.
David
More information about the Digitalmars-d
mailing list