Effective C++之八

    要点:不要在析构函数中抛出异常

    Mayers举了一个Widgets vector例子:如果第一个元素的析构函数中抛出了异常,为了避免资源泄漏等问题,其他元素也需要析构,假设第二个元素的析构函数又抛出一个异常。C++无法同时处理两个异常,将导致未知行为甚至程序终止。

    补充一个例子:函数执行中抛出异常,退出该函数前将析构所有局部对象。如果在析构局部对象时又抛出异常,也将面对同时处理两个异常的问题。

    解决方案是:不要在析构函数中抛出异常

    接着又举了在数据库连接类的析构函数中,关闭数据库连接可能抛出异常的情况。有两种Mayers认为不够好的处理方式:

    1) 发生异常时退出程序,显然不够好

    2) catch异常并忽略它。这个方案不够好的原因是,它吞掉了“系统发生了错误”这个重要信息。

    较好的解决方案是:提供关闭操作函数,让调用者来处理异常。考虑到用户可能忘了调用关闭函数,所以在析构函数中检查连接,如果未关闭则关闭。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值