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