例子:
#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声明,子类的析构函数将不会执行,造成内存泄漏