Cuando construimos una clase padre y de ella heradamos varios hijos con destructor, es aconsejable añadir al padre un destructor virtual, aunque no haga nada.
class Padre
{
virtual ~Padre() {;} /* Puede tener o no código */
};
class Hija : public Hija
{
~Hija() { /* código */ ; }
};
Si no hacemos esto, podemos encontrar problemas al destruir la clase hija usando un puntero de tipo Padre*. Al no ser el destructor del padre virtual (o no tenerlo), se llamará al destructor de Padre y no al de Hijo
main()
{
Padre *Puntero = NULL;
Puntero = new Hija();
/* ... código ... */
delete Puntero; /* Como puntero es de tipo Padre, si su destructor no es virtual, no se llamará al destructor de Hija */
}