Object destruction versus finalization

Jonathan M Davis jmdavisProg at gmx.com
Tue Nov 12 14:58:14 PST 2013


On Tuesday, November 12, 2013 23:40:24 Florian wrote:
> it would be possible to move the shutdown() sequence into the
> destructor of the "Connection" class.

Classes in D do not have destructors. Only structs to. ~this is a destructor 
in a struct, but it's a finalizer in a class. Finalizers are not guaranteed to 
be run, and they can't do anything with GC memory (be it allocating it, 
deallocating it, or using it) unless they're begging for trouble, because the 
GC is free to collect any GC-allocated objects before calling any finalizers 
(which avoids circular reference problems). As such, class finalizers are 
really only good for managing non-GC resources.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list