in C++: Why should the destructor of base classes be virtual?
For situations like this:
class A { virtual ~A(); }; class B:A { ~B(); }; A *a = new B(); //legal, since it's a downcast delete a; //Unless the destructor is virtual, ~A() is called here instead of ~B().