(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) 类的析构函数退出后不能还有未处理的异常。