父类指针在析构时,不会释放子类中析构函数,导致子类如果有堆区属性不能被释放,出现泄露
作用:解决父类指针在释放时无法访问子类的析构代码
class A
{
public:
string *name;
virtual ~A()=0;//一个纯虚析构,表示这个类是抽象类//虚析构则表示这个类不是抽象类
}
class B:public::A
{
B()
{
name=new string("小明");//在堆在开辟一块内存
}
public:
void add()
{
cout<<*name<<endl;
}
~A()//实现抽象类A的存虚析构,避免了释放A类型引用不经过B类的析构函数
{
if(this.name!=NULL)
{
deleta name;//释放内存
name=NULL;
}
}
}
int main()
{
A*a= new B;//创建一个B对象指向A类引用
a.add();
delete a;//释放对象a
}