Avatar ·

Quando usar destrutores virtuais em C++?

Olá a todos! Sou um desenvolvedor C++ iniciante e estou com uma dúvida. Comecei a estudar polimorfismo e herança, e me deparei com a seguinte situação.\n\nDigamos que eu tenha uma classe base `Animal` e uma classe derivada `Dog`. Quero usar smart pointers (shared_ptr) para gerenciamento automático de memória. O código fica assim:\n\n```cpp\n#include \n#include \n\nclass Animal {\npublic:\n Animal() { std::cout << "Animal created"; }\n ~Animal() { std::cout << "Animal destroyed"; }\n virtual void speak() { std::cout << "Animal sound"; }\n};\n\nclass Dog : public Animal {\npublic:\n Dog() { std::cout << "Dog created"; }\n ~Dog() { std::cout << "Dog destroyed"; }\n void speak() override { std::cout << "Woof!"; }\n};\n\nint main(