So why the heck would you or anyone else ever want to define a virtual destructor? Have a look at the following code:
class Blah {
public:
virtual ~Blah() {}
// more code
};
Note here that the body of the virtual destructor is empty. What gives?
When you think about it more closely, you cannot help but realize that this is necessary. Whenever a pointer to the Blah
class is used to delete
an object that might actually be a derived-class object, then be careful, e.g. a virtual destructor is required unless you enjoy blowing up your program in unpredictable ways.
Since this destructor is inherited by the derived classes there is no need to redefine this destructor in the derived classes.