如何使用exception

来源:互联网 发布:安卓蓝光播放器软件 编辑:程序博客网 时间:2024/05/16 01:54

1.exception的代价比较大,要避免(至少减少)使用

2.在可控范围内,或者说可预料的情形,不要使用exception,而要使用error covering logic来替代. exception不能用来control flow。

 

3.在不可预料的情况下,只能使用exception了。

比如,打开系统文件,但是找不到,应该抛出一个exception;而打开一个自己创建的log文件,找不到的话,不应该抛exception,而是用back uplogic—重新创建一个文件。

比如,一个自己用的list,完善自己的logic,做到有多少element用多少element;不要通过exception来处理element不够用的情况。

这两个例子都比较简单,目标对象和调用逻辑都在同一个控制范围里。

在复杂的情况下,假设A是自己的代码,B是第三方控件,A调用B。对于B而言,如果有错误调用,在它内部只能返回exception,别无他法。这种情况下,只能是改进A的代码,避免错误调用。比如在执行B中的某功能前,先validate一下B中的资源情况。(---(2012/4/3 update)第三方代码,也不是除了exception就别无他法了。像win API,很多都是返回error code的---)

可以这么理解,对编程者面向的范围而言,如果是application级别的代码,避免用exception;如果是system级别的代码,在你无法做出纠错处理时,可以使用exception


4.对于大型软件,分配一片保留的内存后备区域
用样来保证程序崩溃的紧急处理所需要的内存是个简洁的方法。


5.exception的害处 (2012/4/3 update)

Why is exception handling bad(http://stackoverflow.com/questions/1736146/why-is-exception-handling-bad)
这是一篇好文章。最大的危害,就是一旦Exception抛出,object将处于inconsistent的状态;因为通常不能很好地roll back。这会导致莫名其妙的bug。

如果你考虑这种roll back,那么coding的过程将会很痛苦。
c++中推崇RAII,但是这只能解决resource的release,不能解决varaibles的reset。这样又有了另一个建议:先做可能抛出exception的事情(参见"编写异常安全的C++函数": http://blog.csdn.net/fishhg/article/details/6647822)。

对于managed language,有一个finally语句必定会被执行,可能可以在这里做一些使object consistent的操作。

原创粉丝点击