C++ Primer 有感(异常处理)
1.异常是通过抛出对象而引发的。 该对象的类型决定应该激活哪个处理代码 。被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。 2.执行throw的时候, 不会执行跟在 throw 后面的语句,而是将控制从 throw 转移到匹配的 catch ,该 catch 可以是同一函数中局部的 catch ,也可以在直接或间接调用发生异常的函数的另一个函数中。 控制从一个地方传到另一地方,这有两个重要含义: (1)沿着调用链的函数提早退出。 (2)一般而言,在处理异常的时候, 抛出异常的块中的局部存储不存在了。 因为在处理异常的时候会释放局部存储,所以被抛出的对象就不能再局部存储,而是用 throw 表达式初始化一个称为异常对象的特殊对象。 异常对象由编译器管理,而且保证驻留在可能被激活的任意catch都可以访问的空间。这个对象由throw创建,并被初始化为被抛出的表达式的副本。异常对象将传给对应的catch,并且在完全处理了异常之后撤销。(异常对象通过复制被抛出表达式的结果创建,该结果必须是可以复制的类型。) 3.当抛出一个表达式的时候, 被抛出对象的静态编译时类型决定异常对象的类型 。 4.用抛出表达式抛出静态类型时,比较麻烦的一种情况是,在抛出中对指针解引用。对指针解引用的结果是一个对象,其类型与指针的类型匹配。如果指针指向继承层次中的一种类型