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