Avatar ·

¿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