#include <iostream>
using namespace std;
class Parent
{
public:
Parent()
{
cout << "Parent Create" << endl;
}
~Parent()
{
cout << "Parent Destroy" << endl;
}
};
class Child : public Parent
{
public:
Child()
{
cout << "Child Create" << endl;
}
~Child()
{
cout << "Child Destroy" << endl;
}
};
int main()
{
Parent *pP = new Child();
delete pP;
pP = NULL;
return 0;
}
运行结果:
Parent Create
Child Create
Parent Destroy
可以看到父类对象析构函数没有被执行,这会造成内存泄漏。
解决办法:将基类的析构函数改写成虚函数即可,如下:
class Parent
{
public:
Parent ()
{
cout << "Parent Create" << endl;
}
virtual ~Parent ()
{
cout << "Parent Destroy" << endl;
}
};
运行结果:
Parent Create
Child Create
Child Destroy
Parent Destroy