Destructors vs. Finalizers

Mike Parker via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 26 05:55:17 PDT 2017


On Wednesday, 26 July 2017 at 09:29:15 UTC, Moritz Maxeiner wrote:


> As class destructors (in contrast to class finalizers) are then 
> called exclusively in a deterministic fashion, there's no 
> reason to forbid them from allocating using the GC, so I don't 
> think using the @nogc attribute would be appropriate; I would 
> much rather see another attribute in the likes of @disable, 
> e.g. @deterministic, so
> ---
> ~this() {}                    // Finalizer
> ~this() @nogc {}              // Finalizer
> ~this @deterministic {}       // Destructor
> ~this @nogc @deterministic {} // Destructor
> }

Yeah, this brings with it more flexibility. I'd prefer to avoid 
adding a new attribute for it, but this looks more interesting.


>> When cleaning up, the GC will ensure that all destructors are 
>> run where they exist, followed by all finalizers.
>
> Having the GC directly call destructors defeats the point of 
> separating them from finalizers in the first place:

Indeed! Let's pretend I didn't write that.



More information about the Digitalmars-d mailing list