什么时候应该在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