in C++: Why should the destructor of base classes be virtual?
It should be virtual to ensure that the destructor of the inherited classes are the ones actually getting called at runtime instead of the base class destructor being called.