C++异常处理机制核心观点

1.        如果使用普通的处理方式:ASSERT,return等已经足够简洁明了,请不要使用异常处理机制。 

2.        比C的setjump,longjump优秀。

3.        可以处理任意类型的异常。 

4.        需要一定的开销,频繁执行的关键代码段避免使用。

其强大的能力表现在:

1)       把可能出现异常的代码和异常处理代码隔离开,结构更清晰。 

2)       把内层错误的处理直接转移到适当的外层来处理,化简了处理流程。传统的手段是通过一层层返回错误码把错误处理转移到上层,上层再转移到上上层,当层数过多时将需要非常多的判断, 以采取适当的策略。 

3)       局部出现异常时,在执行处理代码之前,会执行堆栈回退,即为所有局部对象调用析构函数,保证局部对象行为良好。 

4)       可以在出现异常时保证不产生内存泄漏。通过适当的try,catch 布局,可以保证delete pobj;一定被执行。

5)       在出现异常时,能够获取异常的信息,指出异常原因。 并可以给用户优雅的提示。 

6)       可以在处理块中尝试错误恢复。保证程序几乎不会崩溃。

通过适当处理,即使出现除0异常,内存访问违例,也能让程序不崩溃,继续运行,这种能力在某些情况下极其重要。

以上6条可以使你的程序更稳固,健壮,不过有时让程序崩溃似乎更容易找到原因,程序老是不崩溃,如果处理结果有问题,有时很难查找。

 

5.        并不是只适合于处理'灾难性的'事件。

普通的错误处理也可以用异常机制来处理,不过如果将此滥用的话,可能造成程序结构混乱, 因为异常处理机制本质上是程序处理流程的转移,不恰当的,过度的转移显然将造成混乱。许多人认为应该只在'灾难性的'事件上使用异常处理,以避免异常处理机制本身带来的开销,你可以认为这句话通常是对的。

6.        先让程序更脆弱,再让程序更坚强。首先,它使程序非常脆弱,稍有差错,马上执行流程跳转掉,去寻找相应的处理代码,以求适当的解决方式。

 

WINDOWS:

7.        将结构化异常处理结合/转换到C++异常对象,可以更好地处理WINDOWS程序出现的异常。

8.        尽一切可能使用try,catch,而不是win32本身的结构化异常处理或者MFC中的TRY,CATCH宏。


注:将结构化异常处理结合/转换到C++异常对象,可以更好地处理WINDOWS程序出现的异常。尽一切可能使用try,catch,而不是win32本身的结构化异常处理或者MFC中的TRY,CATCH宏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值