例子:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
class PER1{
public:
PER1(){cout<<"create PER1"<<endl;};
virtual ~PER1(){cout<<"exit PER1"<<endl;};
//~PER1(){cout<<"exit PER1"<<endl;};
};
class PER2:public PER1
{
private:
char* p;
public:
PER2(){
cout<<"create PER2"<<endl;
p = new char[5];
};
~PER2(){
cout<<"exit PER2"<<endl;
cout<<"delete p"<<endl;
delete p;
};
};
int main()
{
PER1* p=new PER2;
delete p;
return 0;
}
结果:
create PER1
create PER2
exit PER2
delete p
exit PER1
不加virtual的结果是:
create PER1
create PER2
exit PER1
结论:当用一个基类的指针删除一个派生类的对象时,如果基类的析构函数没有加virtual声明,子类的析构函数将不会执行,造成内存泄漏
本文探讨了在C++中使用基类指针删除派生类对象时,若基类析构函数未加virtual声明导致的内存泄漏问题,并通过实例展示了正确使用析构函数的重要性。
2148

被折叠的 条评论
为什么被折叠?



