C++ 虚析构函数
1、何时需要虚析构函数
当一个类作为基类时,该类的析构函数应声明为虚析构函数
2、虚析构函数的作用
防止内存泄漏
例如:若类A为基类,类B继承自类A,创建一个A类型的指针p指向派生类B,当delete p时程序只会调用基类A的析构函数,而不会调用派生类的析构函数,如果派生类的析构函数中有释放内存的操作时就不会被执行,从而造成内存泄漏
#include <iostream>
using namespace std;
class Base
{
private:
int m_a;
public:
Base(int a)
{
m_a = a;
}
~Base()
{
cout << "调用基类析构函数" << endl;
}
};
class Derive : public Base
{
private:
int m_b;
public:
Derive(int a, int b) : Base(a)
{
m_b = b;
}
~Derive() //delete p时不会被调用
{
cout << "调用派生类析构函数" << endl;
}
};
int main()
{
Base *p = new Derive(2, 3);
delete p;
return 0;
}
结果:
调用基类析构函数
只需要在基类析构函数前加上virtual便可
virtual ~Base()
{
cout << "调用基类析构函数" << endl;
}
结果:
调用派生类析构函数
调用基类析构函数