I played around a little and figured out, that destructors in D work quite similarily to destructors in C++. They are invoked, after the members of the instance being destructed have been destroyed themselfes (or at least have been brought into an invalid state). Therefore, these members cannot be accessed savely from inside the destructor.

In contrast, Java and C# offer a concept called finalizer. When the finalizer is called, all members of the instance itself are still valid and are guaranteed to be freely accessible. This behaviour can be useful for some cleanup operations.

Managed C++ offers both, C#-like finalizers and conventional C++ destructors, where the destructor is called ~className and the finalizer is called !className. Is their a best practice to mimikry this behaviour, i.e. to call a certain block of code when an object is being garbage collected, but before its contents render invalid?

Any hints would be greatly appreciated.

Reply via email to