C++ 异常处理

    程序运行时有些错误是不能避免的。出现错误时,传统的做法是返回一个错误值,调用if语句进行判断。这种做法有两种缺陷:

    (1) 构造函数不可能返回错误值;

    (2) if语句可能出现更多错误。

    C++提供了异常机制。异常处理的基本思想是:当出现错误时抛出一个异常,调用者能捕获并处理这个异常。如果调用者也不能处理这个异常,那么异常会传递给上级调用,直到被捕获处理为止。如果这个异常始终没有被处理,它会被传到C++运行环境,运行环境捕获后通常只是简单地终止这个程序。

    C++异常机制有以下的规则:

    (1) 异常处理能控制流程的转移,只用来处理异常错误,不能实现普通的流程转移。

    (2) 抛出的异常对象不应该是指针类型,因为指针什么时候销毁、由谁来销毁很难说。

    (3) 不能把NULL作为异常对象抛出,因为throw(NULL)=throw(0)。

    (4) throw语句中的表达式本身不能引发新的异常。

    (5) 空的throw语句只能出现在catch语句块中。空的throw用来将捕获的异常再抛出,可以实现多个处理程序问

        异常的传递。

    (6) 所有可能的流程中显式抛出来的异常都应该有一个类型兼容的处理程序。

    (7) 至少要有一个处理程序来处理所有其他未针对处理的异常。

    (8) 若一个try-catch语句块有多个处理程序,或者一个派生类和其部分或全部基类的function-try- block块有

        多个处理程序,处理程序的顺序应该是先派生类后基类。

    (9) 若一个try-catch语句块或者function-try-block块有多个处理程序时,catch(…)处理程序应该放在最后。

    (10) 若异常对象为类的对象时,应该通过引用来捕获。

    (11) 如果类的构造函数和析构函数是function-try-block结构的,在catch处理程序中不能引用该类或其基类

         的非静态成员。

    (12) 类的析构函数退出后不能还有未处理的异常。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值