Finalizers, Destructors, RAII, GC
12345swordy
alexanderheistermann at gmail.com
Wed Apr 28 14:43:24 UTC 2021
On Wednesday, 28 April 2021 at 10:04:20 UTC, Ola Fosheim Grøstad
wrote:
> It is currently an issue that people might write a class for
> RAII and then allocate in on the GC heap, that means that
> destructors can be called in the wrong order.
>
> If D adds a finalizer() method, this could be resolved the
> following way:
>
> Objects with non-empty destructors cannot be GC allocated.
>
> The finalizer() method should be used for releasing all non-GC
> resources accessible from non-GC pointers/identifiers, but one
> should not follow pointers to GC-memory from a finalizer as
> they may not exist.
>
> So a RAII object needs to call the finalizer from the
> destructor, but exactly what would the implications be for
> inheritance?
>
> Anyway, if it isn't clear, the basic goal is to allow RC-based
> RAII and GC to coexist.
>
> Or would it be better to simply forbid any cleanup in the GC? I
> kinda think so, but I also think many D users are used to
> letting the GC trigger cleanup on collection.
>
> What do you think?
Split the finalizer from the destructor and make the finalizer an
interface.
-Alex
More information about the Digitalmars-d
mailing list