More Effective C++读书笔记13

来源:互联网 发布:华为java编码规范 编辑:程序博客网 时间:2024/06/06 05:25
Item 13:通过引用(reference)捕获异常

    为什么要通过引用捕获异常,引用捕获异常相对值和指针捕获有何优点?
    通过Item12学习可以看到首先,值捕获异常会调用拷贝构造函数2次,而引用捕获只有一次,效率方面,引用要高于值。可以按效率高低进行下排序,由高到低:指针->引用->值。
其次值传递在继承体系中会导致slice问题,即子类会被切割为基类。通过这两点就可以完全排除值捕获异常的可能性了。那么指针和引用相比,为什么要采用引用呢?
     如果要是通过指针捕获异常的话,那么传递过来的指针是堆栈分配的?还是静态指针?还是栈对象的取地址操作获取的指针?根据不同的情况,会有不同的结果。如果是堆栈分配的指针,那么需要释放内存,如果通过局部对象的地址获取的指针,有可能在捕获到后,已经超过作用域,而指向一个已经销毁的对象,所以对catch来说,通过指针捕获异常,对异常的处理要复杂得多,也难以保持统一。而通过引用捕获异常却没有这些问题,所以当然最终选择最优的方案,通过引用捕获异常。
原创粉丝点击