Avatar ·

什么时候应该在C++中使用虚析构函数,如果不声明会怎样?

大家好!我刚开始学习C++,有一件事一直搞不明白。请看: 我有一个基类 `Base` 和一个派生类 `Derived`。在 `Derived` 中,我在堆上分配了内存。当我通过基类指针创建对象,然后通过 `delete` 删除它时,只会调用 `Base` 的析构函数,而 `Derived` 的析构函数不会被调用。这会导致内存泄漏,因为在派生类中分配的内存没有被释放。 我知道需要在基类中的析构函数前加上 `virtual`,这样一切就正常了。但为什么会这样?我明明写了应该调用派生类析构函数的代码?还是我理解错了? 以下是我无法正常工作的代码示例(准确地说,它能运行,但有内存泄漏): ```cpp class Base { public: ~Base() { std::cout << "Base destructor\n"; } }; class Derived : public Base { private: int* data; public: Derived() { data = new int[100]; } ~Derived() { delete[] data; std::cou