当正常写出构造析构的时候,不会调用子类析构,有可能会导致内存泄露的问题。
解决:利用虚析构。将父类的析构函数变为虚函数。
子类析构重写了父类的析构函数,发生了多态,最终调用的是子类的析构。在回收对象本身的空间时,包含了父类的匿名对象,调用父类的析构。
#include <iostream>
using namespace std;
class CF {
public:
CF() { cout << "CF" << endl; }
//利用虚析构。将父类的析构函数变为虚函数。
virtual ~CF(){ cout << "~CF" << endl; }
};
class CS :public CF {
public:
CS() { cout << "CS" << endl; }//构造函数不能为虚函数
~CS() { cout << "~CS" << endl; }//编译器对名字进行改造后认为是一样的,认为是重写
};
int main()
{
CF* pfa = new CS;
//delete调用析构函数根据的是指针的类型调用析构函数
delete pfa;
system("pause");
return 0;
}