首页 > 其他 > 详细

【08】别让异常逃离析构函数

时间:2014-01-17 09:07:59      阅读:371      评论:0      收藏:0      [点我收藏+]

1、考虑一个类Widget,析构方法抛出异常,一个集合中包含10个Widget对象,集合离开作用域,逆序撤销集合里的对象,最后一个抛出异常,倒数第二个抛出异常,问题出现了,这种情况下,要么导致程序结束,要么导致不明确行为。

2、因此,绝不能在析构方法中抛出异常。考虑,数据库连接类DBConn,用户可能会忘记关闭连接,因此在DBConn的析构方法中,执行Close方法。那么问题来了,close方法可能会抛出异常,怎么办?

  a、在析构方法中,捕获异常,结束程序,这种方法可用性太差。

  b、在析构方法中,捕获异常,吐下异常,这种方法忽略错误,程序继续运行,接下来可能会导致不明确行为。

3、上面两种解决办法都不好,有没有更好的办法呢?

  设计异常的目的就是,将问题检测和问题处理分离。显然,DBConn不知道怎么处理问题(结束程序和吐下异常都不合适),那就应该抛出去,让用户处理。既然Close方法可能有异常,而析构方法抛出异常总是危险,更好的解决办法,暴露Close方法,让用户决定怎么处理异常。同时,在析构方法中,再做一次检查。

【08】别让异常逃离析构函数

原文:http://www.cnblogs.com/nzbbody/p/3523158.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!