C++异常处理

潜心研究C++异常处理机制数日,有所得,与大家共享:

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

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

1.比C的setjump,longjump优秀.

2.可以处理任意类型的异常.    你可以人为地抛出任何类型的对象作为异常.    throw 100;    throw "hello";    ...

3.需要一定的开销,频繁执行的关键代码段避免使用    C++异常处理机制.

4.其强大的能力表现在:    A.把可能出现异常的代码和异常处理代码隔离开,结构更清晰.    B.把内层错误的处理直接转移到适当的外层来处理,化简了处理      流程.传统的手段是通过一层层返回错误码把错误处理转移到     上层,上层再转移到上上层,当层数过多时将需要非常多的判断,     以采取适当的策略.    C.局部出现异常时,在执行处理代码之前,会执行堆栈回退,即为      所有局部对象调用析构函数,保证局部对象行为良好.    D.可以在出现异常时保证不产生内存泄漏.通过适当的try,catch      布局,可以保证delete pobj;一定被执行.

   E.在出现异常时,能够获取异常的信息,指出异常原因.      并可以给用户优雅的提示.    F.可以在处理块中尝试错误恢复.保证程序几乎不会崩溃.      通过适当处理,即使出现除0异常,内存访问违例,也能      让程序不崩溃,继续运行,这种能力在某些情况下及其重要.

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

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

6.先让程序更脆弱,再让程序更坚强.首先,它使程序非常脆弱,稍有差错,马上    执行流程跳转掉,去寻找相应的处理代码,以求适当的解决方式.    很像一个人身上带着许多药品,防护工具出行,稍有头晕,马上拿出清凉油;    遇到蚊子立刻拿出电蚊拍灭之.

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

用得恰到好处,方显C++异常之美妙!

原文链接:https://www.xuebuyuan.com/1579706.html

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏精讲JAVA

详述 PO VO BO DTO DAO 和 POJO 的概念及区别

 说实话,我相信对于刚接触 PO、VO、BO、DTO、DAO 和 POJO 这些概念的同学来说,大都会有一种“这都是什么鬼?”的感觉,可谓是云里雾里,不知今...

1465
来自专栏java工会

CodeReview常见代码问题

空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的...

1370
来自专栏瓜大三哥

UVM模型(四)

UVM模型(四) ? 1.常用到的uvm_component uvm_driver:所有的driver都要派生自uvm_driver。driver的功能...

2559
来自专栏Python专栏

Python | 一次下完所有小说,还有谁!

来源:http://www.cnblogs.com/Josiah-Lin/p/7241678.html

1023
来自专栏battcn

一起学设计模式 - 中介者模式

在我们的生活中处处充斥着中介者,比如租房、买房、出国留学、找工作、旅游等等可能都需要那些中介者的帮助,同时我们也深受其害,高昂的中介费,虚假信息。 在地球上最大...

972
来自专栏精讲JAVA

详述 PO VO BO DTO DAO 和 POJO 的概念及区别

 说实话,我相信对于刚接触 PO、VO、BO、DTO、DAO 和 POJO 这些概念的同学来说,大都会有一种“这都是什么鬼?”的感觉,可谓是云里雾里,不知今...

1252
来自专栏维C果糖

详述 PO VO BO DTO DAO 和 POJO 的概念及区别

  说实话,我相信对于刚接触 PO、VO、BO、DTO、DAO 和 POJO 这些概念的同学来说,大都会有一种“这都是什么鬼?”的感觉,可谓是云里雾里,不知今夕...

2755
来自专栏更流畅、简洁的软件开发方式

【自然框架】注册会员活动——第一份代码的修改建议(第一版)

  感谢“好坏”提供代码,这是我看过的比较不错的三层结构的代码了,业务层并不是直接调用DAL,而是有其自身的逻辑判断,并不是传声筒,很赞。 我对这份代码,按照自...

2226
来自专栏互扯程序

毕业季,跳槽季,不刷点面试题怎么能行?

现在是资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。 前言 马上就是一年一度的毕业季 跳槽季,找工作三大要素,简...

3495
来自专栏阮一峰的网络日志

都柏林核心(Dublin Core)

在上一篇日志中,我介绍了元数据(MetaData),并且说只要有一个集合,就可以定义一套元数据。 这样一来,很自然的,我们就会想到一个问题:有没有可能定义一套通...

2777

扫码关注云+社区