为什么 基类的析构函数通常被声明为虚函数(virtual),这样子类可以覆盖基类的析构函数行为
时间: 2024-11-15 13:27:32 浏览: 1
浅谈C++基类的析构函数为虚函数
基类的析构函数通常声明为虚函数(`virtual`)的主要原因在于保证动态多态性的正确性,特别是当涉及到继承和删除指向基类的指针时。如果基类的析构函数不是虚函数,而在派生类中定义了一个不同的析构函数,当我们通过基类指针调用析构函数时,执行的是基类的析构函数,而不是实际指向的对象类型。这可能导致资源释放不完全,因为派生类可能有自己的特定清理逻辑。
具体来说,如果一个基类的析构函数是虚的,那么当使用`delete`操作符销毁一个派生类对象时,即使是指向基类的指针,也会执行正确的析构函数,即派生类的析构函数。这样可以避免潜在的内存泄漏和其他未预期的行为。
举个例子[^1]:
```cpp
class Base {
public:
virtual ~Base() { /* 基类析构 */ }
};
class Derived : public Base {
public:
virtual ~Derived() override { /* 派生类析构 */ }
};
// 创建派生类对象并删除
Derived* derivedObj = new Derived();
delete basePtr; // 如果Base的析构函数是虚的,这里会调用Derived的析构
```
阅读全文