摘要:
有可能单个catch 不能完全处理一个异常。在进行了一些校正行动之后,catch 可能确定该异常必须由函数调用链中更上层的函数来处理,catch 可以通过重新抛出将异常传递函数调用链中更上层的函数。重新抛出是后面不跟类型或表达式的一个throw: throw;空throw 语句将重新抛出异常对象,它只能出现在 catch 或者从 catch 调用的函数中。如果在处理代码不活动时碰到空 throw,... 阅读全文
posted @ 2010-08-12 13:30
cppfans
阅读(139)
评论(0)
推荐(0)
摘要:
栈展开期间会经常执行析构函数。在执行析构函数的时候,已经引发了异常但还没有处理它。如果在这个过程中析构函数本身抛出新的异常,又会发生什么呢?新的异常应该取代仍未处理的早先的异常吗?应该忽略析构函数中的异常吗?答案是:在为某个异常进行栈展开的时候,析构函数如果又抛出自己的未经处理的另一个异常,将会导致调用标准库terminate 函数。一般而言,terminate 函数将调用abort 函数,强制从... 阅读全文
posted @ 2010-08-12 13:15
cppfans
阅读(107)
评论(0)
推荐(0)
摘要:
用抛出表达式抛出静态类型时,比较麻烦的一种情况是,在抛出中对指针解引用。对指针解引用的结果是一个对象,其类型与指针的类型匹配。如果指针指向继承层次中的一种类型,指针所指对象的类型就有可能与指针的类型不同。无论对象的实际类型是什么,异常对象的类型都与指针的静态类型相匹配。如果该指针是一个指向派生类对象的基类类型指针,则那个对象将被分割(第 15.3.1 节),只抛出基类部分。如果抛出指针本身,可能会... 阅读全文
posted @ 2010-08-12 13:10
cppfans
阅读(130)
评论(0)
推荐(0)
浙公网安备 33010602011771号