On 12/20/17 9:57 PM, Mike Franklin wrote:
"Don't expect class destructors to be called at all by the GC"
I was a bit shocked to read that here:
https://p0nce.github.io/d-idioms/#The-trouble-with-class-destructors
The document tries to clarify with:
"The garbage collector is not guaranteed to run the destructors for all
unreferenced objects."
Unfortunately, that doesn't really shed much light on this oddity. So,
specifically, under what circumstances are destructors not called?
It's implementation defined :)
The gist is, you cannot expect that destructors will be run in a timely
manner, or at all.
They may be called, and most of the time they are. But the language nor
the current implementation makes a guarantee that they will be called.
For this reason, any classes that use non-memory resources should clean
up those resources before becoming garbage. This is why most of the
time, such items are managed by structs.
Note that the same non-guarantee exists in other GC'd languages, such as
Java or C#.
-Steve