¿Cuándo se deben usar destructores virtuales en C++?
¡Hola a todos! Soy un desarrollador principiante de C++ y me atormenta una pregunta. Acabo de empezar a entender el polimorfismo y la herencia, y me encontré con esta situación.
Supongamos que tengo una clase base `Animal` y una clase derivada `Dog`. Quiero usar smart pointers (shared_ptr) para la gestión automática de memoria. El código se ve así:
```cpp
#include
#include
class Animal {
public:
Animal() { std::cout << "Animal created\n"; }
~Animal() { std::cout << "Animal destroyed\n"; }
virtual void speak() { std::cout << "Animal sound\n"; }
};
class Dog : public Animal {
public:
Dog() { std::cout << "Dog created\n"; }
~Dog() { std::cout << "Dog destroyed\n"; }
void speak() override { std::cout << "Woof!\n"; }
};
int main() {
std::shared_ptr pet = std::make_shared();
pet->speak(); // Imprime "Woof!"
// pet sale del ámbito...
}
```
Cuando el programa termina, veo en la consola