C++父类指针指向子类对象时,父类析构必须为虚函数
示例1 [1]:
#include <iostream>
using namespace std;
class Base_J
{
public:
Base_J()
{
cout << "Base Created" << endl;
}
~Base_J()
{
cout << "Base Destroyed" << endl;
}
};
class Derived_J : public Base_J
{
public:
Derived_J()
{
cout << "Derived Created" << endl;
}
~Derived_J()
{
cout << "Derived Destroyed" << endl;
}
};
int main()
{
Base_J *pB = new Derived_J();
delete pB;
pB = NULL;
system("pause");
return 0;
}
上述代码运行结果:
Base Created
Derived Created
Base Destroyed
可以看到父类对象析构函数没有被执行,这会造成内存泄漏。
解决办法:将基类的析构函数写成虚函数即可,如下,
class Base_J
{
public:
Base_J()
{
cout << "Base Created" << endl;
}
virtual ~Base_J()
{
cout << "Base Destroyed" << endl;
}
};
参考文献
有空可以看看 C++多态详解