签到

05月05日
尚未签到

共有回帖数 0

    李小主任

    等级:
    潜心研究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++异常之美妙!

    楼主 2016-07-14 21:23 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知