more effective C++条款十解析

在处理异常的时候 利用对象来管理资源来避免资源泄露

我们的程序可能在某一条语句抛出异常,导致其之后的代码没有被执行。这时候我们利用对象来管理资源,避免泄露,你可能会说利用try  catch的形式,但是形式使我们的程序的复用性降低,并且可读性降低。利用对象来管理资源,如果抛出异常来的话,当程序离开其作用域析构函数就会被调用。避免资源泄露。

在构造函数内阻止资源泄露

构造函数尚未完成,C++不会调用内的析构函数,在构造函数中,如果可能发生异常,我们必须自己做好清理工作(避免资源泄露),利用try catch。这时候我们需要清理好资源后在抛出异常。所以说构造函数是可以抛出异常的,但是我们必须铭记析构函数不会被调用了,我们必须自己做好资源的清理工作。一个好的习惯是,对象内的资源,也也成员对象来管理。就不必担心资源的泄露问题了,一个简单的例子就是,如果一个类里面需要一个指针,那么这个成员指针,最好是智能指针。


禁止异常流出析构函数

首先明确析构函数被调用的两种情况:

1.对象在正常状态下被销毁也就是离开了它的生存空间或是被明确的删除。

2.当对象被异常处理机制也就是exception传播过程中的栈展开机制中被销毁。

我们不允许在析构函数中抛出异常,因为一个析构函数抛出异常的同时,很有可能有一个exception正在作用。同时产生两个异常,C++会调用terminate函数,这可能造成资源的泄露。这种情况尤其是我们在处理容器的时候很容易发生,所以我们绝不能让异常流出构造函数。另一个阻止异常流出析构函数的原因在于,可能析构函数还没有完成它的清理工作。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

weixin_38911779

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值