Avatar ·

什么时候应该在C++中使用虚析构函数?

大家好!我是一名C++初学者,有一个问题困扰着我。我刚开始学习多态性和继承,遇到了这样一个情况。 假设我有一个基类`Animal`和一个派生类`Dog`。我想使用智能指针(shared_ptr)来自动管理内存。代码如下: ```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(); // 输出 "Woof!" // pet 离开作用域... } ``` 当程序结束时,我在控制台看到