Question about destructor of database and multiple use access

Lodovico Giaretta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jul 28 08:18:24 PDT 2016


On Thursday, 28 July 2016 at 15:02:58 UTC, Dechcaudron wrote:
> On Thursday, 28 July 2016 at 14:43:32 UTC, Lodovico Giaretta 
> wrote:
>> No! Never run important finalization in a class destructor! 
>> The GC is not obliged to run the destructors, so you may end 
>> up with your objects destroyed but the connections still open. 
>> For this kind of important things, you have to do them 
>> manually.
>
> I always thought that the moment of finalization is 
> undetermined, but that the GC does indeed run the destructor... 
> Weird, I'll have to look into that. After all what would be the 
> point of destructors if they are not guaranteed to be run?

The collector does not immediately finalize objects. It just 
schedules them for finalization at a later time. So:
1) If you don't get low on memory, no collection is performed, so 
no object is scheduled for finalization;
2) even if a collection is performed, false pointers may prevent 
some unreachable object from becoming garbage and being scheduled 
for finalization;
3) at program end, live objects are not scheduled for 
finalization;
4) at program end, pending finalizations from previous 
collections may not be run.


More information about the Digitalmars-d-learn mailing list