我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明:#include<iostream>using namespace std;
时间: 2024-09-28 09:09:44 浏览: 30
浅谈C++基类的析构函数为虚函数
在C++中,将基类的析构函数声明为虚函数的主要原因是为了确保动态分配的对象能够正确地被删除。当你有一个派生类,并且这个派生类也有可能通过指针或引用间接访问,如果没有将其析构函数设为虚的,那么当基类指针指向派生类实例时,程序会调用的是基类的析构函数,而不是派生类特有的析构逻辑。
举个例子:
```cpp
class Base {
public:
virtual ~Base() { cout << "Base::~Base()" << endl; }
};
class Derived : public Base {
public:
~Derived() override { cout << "Derived::~Derived()" << endl; }
};
int main() {
Base* basePtr = new Derived(); // 动态创建派生类对象
delete basePtr; // 这里会调用Base的析构函数,因为默认不是虚的
return 0;
}
```
如果`Base`的析构函数不是虚函数,上述代码只会打印"Base::~Base()",而不会显示"Derived::~Derived()"。通过将析构函数设为虚的,可以确保正确地调用到派生类的析构函数,释放正确的资源。
阅读全文