Ah!, y me olvidaba, Ruben3D se ve que entendiste mal lo que leiste del libro... eso de que si delcaras el destructor virtual la clase es abstracta no es asi.
Fijate bien, relee esa parte asi se te quitan las dudas.
El destructor debe ser virtual siempre q tengas herencia (publica, protegida, privada, virtual) para q se liberen todos los objetos de una forma correcta.
eso de que si delcaras el destructor virtual la clase es abstracta no es asi
Si tiene TODOS los metodos abstractos puros es una interfaz.
Si NO tiene Ningun metodo abstracto puro, no es abstracta
Esa explicación parece más la de un interfaz. La idea de la clase abstracta es que no puedas crear instancias, pero no tienes por qué carecer de la posibilidad de implementar los métodos.
Base *Puntero = new ClaseHija();
Si ClaseHija no tiene su destructor declarado como virtual (no virtual puro!, OJO) entonces nunca se llama al destructor de la clase padre.
Excelente libro el de Eckel