After executing the body of the destructor and destroying
any objects with automatic storage duration allocated within the body, a
destructor for class
X
calls the destructors for
X's
direct non-variant non-static data members, the destructors for
X's
non-virtual direct base classes and, if
X
is the most derived class (
[class.base.init]),
its destructor calls the destructors for
X's
virtual base classes
. All destructors are called as if they were referenced with a qualified name,
that is, ignoring any possible virtual overriding destructors in more
derived classes
.