effective C++ 条款八解读

别让异常逃离析构函数

如果异常逃离析构函数,如果有class widgets,我们有vector<widgets> d 如果d离开其作用域 并且widgets的析构函数抛出异常,那么就会连续的抛出异常。导致程序结束和不明确行为,处理的方法最佳是提供一个函数,让用户有机会去处理异常,如果用户没有处理该异常,那么在析构函数中我们就需要吞掉异常或者是捕获异常,让程序提前结束,避免不明确的行为。

class DBConn
{
public:
    void close()
     {
            db.close()
            closed=true;
      }
     ~DBConn()
     {
           if(!closed)
           {
                    try
                    {
                          db.close()
                    }
                    catch(...)
                    {
                           //打日志,或者提前结束程序
                    }
           }
     }
private:
      DBConn db;
      bool closed;
}
close()是提供给客户的函数,让客户有机会处理异常,如果用户自己未处理,那么我们就就在析构函数中处理,但我们给了机会给客户处理可能抛出异常代码的机会。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值