On page 325 of Programming in D, we may have a single parameterless destructor named ```~this()```.

A class may have members of string, File, other classes, etc.

When entering a class destructor, are any of the dynamically allocated class members safe to read? That is, can we expect that a class instance entering its destructor is "fully intact", satisfying all its invariants, and all member variables have not undergone any destruction at this point?

I would expect that a class with strings, FILE handles, etc. would need these to do its housekeeping. If we opened a file in the constructor, we should be able to close the file in the destructor.

As we can explicitly call destroy() on a class instance multiple times, do we need to be "careful" of only closing a file once, rather than closing a file multiple times, if that can cause issues.

What guarantees, if any, exist on entering a class destructor?

Reply via email to