虚析构函数
将基类的析构函数定义为虚函数,delete一个指向子类对象的基类指针,实际被执行的就是子类的析构函数,而子类的析构函数又会自动调用基类的析构函数,从而保证子类和基类中所有的资源都被析构干净。
示例代码
#include <iostream>
using namespace std;
class A {
public:
A (void) {
cout << "A构造" << endl;
}
virtual ~A (void) {
cout << "A析构" << endl;
}
};
class B {
public:
B (void) {
cout << "B构造" << endl;
}
~B (void) {
cout << "B析构" << endl;
}
};
class C : public A {
public:
C (void) {
cout << "C构造" << endl;
}
~C (void) {
cout << "C析构" << endl;
}
private:
B m_b;
};
int main (void) {
A* p = new C;//A构造 B构造 C构造
delete p;//C析构 B析构 A析构
return 0;
}
程序输出:
A构造
B构造
C构造
C析构
B析构
A析构