析构函数定义为虚函数
析构函数定义为虚函数时:基类指针可以指向派生类的对象(多态性),如果删除该指针;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。
当父类的析构函数不定义为虚函数时
#include<iostream>
using namespace std;
class A
{
public:
A(){cout<<"A的构造函数"<<endl;}
~A(){cout<<"A的析构函数"<<endl;}
};
class B :public A
{
public:
B(){cout<<"B的构造函数"<<endl;}
~B(){cout<<"B的析构函数"<<endl;}
};
int main()
{
A* b = new B;
delete b;
}
可以看到子类的析构函数并未被调用
当父类的析构函数定义为虚函数时
#include<iostream>
using namespace std;
class A
{
public:
A(){cout<<"A的构造函数"<<endl;}
virtual ~A(){cout<<"A的析构函数"<<endl;}
};
class B :public A
{
public:
B(){cout<<"B的构造函数"<<endl;}
~B(){cout<<"B的析构函数"<<endl;}
};
int main()
{
A* b = new B;
delete b;
}
可以看到子类的析构函数被调用了