析构函数作为虚函数的作用

引用:windows程序员面试指南

析构函数为虚函数的场景

虚析构函数的作用是为了防止内存泄漏

1.内存泄漏的场景

用基类类型指针绑定派生类实例,析构的时候,如果基类析构函数不是虚函数,则只会析构基类,不会析构派生类对象,从而造成内存泄漏。

2.解决内存泄漏的方式

a.用派生类类型指针绑定派生类实例,析构的时候,不管基类析构函数是不是虚函数,都会正常析构
b.使用虚析构函数

class Father
{
public :
    Father():i(new int1))
	{
    	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 int2))
	{
	    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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值