析构函数为虚函数的场景
虚析构函数的作用是为了防止内存泄漏
1.内存泄漏的场景
用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。
2.解决内存泄漏的方式
a.用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构
b.使用虚析构函数
class Father
{
public :
Father():i(new int(1))
{
cout<<"Father"<<endl;
}
virtual ~Father()//虚析构函数
{
cout<<"Father 释放"<<endl;
delete i;
}
virtual void show()
{
cout<<"i="<<i<<endl;
}
private:
int *i;
};
class Son : public Father
{
public :
Son():j(new int(2))
{
cout<<"Son"<<emsl;
}
~Son()
{
cout<<"Son释放"<<endl;
delete j;
}
void show()
{
cout<<"j="<<j<<endl;
}
private:
int *j;
};
int main()
{
// 虚析构,会析构Son,然后析构Father
Father *f = new Son;
f->show();
delete f;
return 0;
}