Destructors in Hierarchies
Destructors are invoked at the end of the lifetime of an
object.
Destructors are invoked in the opposite order from which
their constructors are invoked.
This means that the derived class destructor is invoked
before its base class destructor.
If there are indirect base classes, this sequence continues
until the furthest base class destructor is invoked.
A derived class destructor is guaranteed that its base class
members are still available for use.