条款十三:以by reference方式捕获异常
来源:互联网 发布:rc4算法 c语言实现 编辑:程序博客网 时间:2024/05/17 02:13
条款十三:以by reference方式捕获异常
1. 传址
异常处理时该如何选择使用传值,传址,传引用;传址不会发生对象的复制,这相对于传值来说性能方面要优越不少,但是传址又会衍生很多问题,比如传址不能传递一个局部的指针,这样离开作用域对象被销毁指针会失效,当然,可以使用传递全局变量或者静态变量来消除这些问题,但是全局变量和静态变量的销毁也是一个问题。可能你想使用throw new execption;来解决问题但是这样抛出的指针你什么时候销毁,该不该销毁又是一个很头疼的问题。
另外,语言中有一些惯例,比如:bad_alloc,bad_cast,bad_typeid,bad_exception诠释对象,不能用传址来捕获。
2. 传值
传值不存在传址中存在的诸多问题,不用考虑何时进行对象的销毁,但是传值有两个很严重的缺点:1.传值会在发生异常时进行自动的拷贝对象,造成较高的资源耗费;2.传值在面对继承类问题时比较尴尬,会发生对象的切片,子类对象会丢失对应的子类数据和成员函数,多态机制也会失效。比如:
class exception //这是一个标准的execption类{public: virtual const char* what() throw();};class user_execption:public exexption{public: virtual const char* what() throw();};void fun(void){ try { throw user_exception; } catch(execption w) { //TODO: std::cout<<w.what()<<std::endl; }}
上述代码中用户catch可以接受用户创建的类的异常,但是user_exception会被切片,失去对应的成员函数和数据,只保留父类的成员;当调用what函数时多态不再适用,而是调用父类的what,这回导致异常类型处理的错误。
3. 传引用
当使用引用时以上问题都不存在,而且对象只会被复制一次,相对于使用传址的安全性和传值造成的对象切片相对来说要好得多。
在异常处理时尽量使用传引用,可以避免很多问题!
0 0
- 条款十三:以by reference方式捕获异常
- 条款13 以by reference 传 exception 练习
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- Effective C++:条款20:宁以 pass-by-reference-to-const替换pass-by-value
- Effective C++ 读书笔记 条款20:宁以pass-by-reference-to-const 替换 pass-by-value
- 条款20 宁以pass-by-reference-to-const替换pass-by-value
- Effective C++条款20解读:宁以pass by reference to const替换pass by value
- 条款20:宁以 pass-by-reference to const 替换 pass by value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- Effective C++读书笔记-----条款20:宁以pass-by-reference-to-const替换pass-by-value
- 《Effect C++》学习------条款20 :宁以pass-by-reference-to-const替换pass-by-value
- 读书笔记《Effective C++》条款20:宁以pass-by-reference-to-const替换pass-by-value
- 条款20:宁以pass-by-reference-to-const替换pass-by-value
- 数据结构之图---广度优先遍历---C++实现
- 【C++】实现万年历
- python 计算信息熵和信息增益
- HDU5802 Windows 10[贪心+DFS]
- 最小生成树——Prim算法
- 条款十三:以by reference方式捕获异常
- 动态树-LCT-bzoj2002弹飞绵羊
- ToggleButton布局
- 解读 Joint Cascade Face Detection and Alignment 人脸检测算法
- SDUT OJ 2506 数据结构实验——完美网络
- Android Camera驱动中添加新的mode
- 前端需掌握的知识
- OJ3364数据结构实验之图论八:欧拉回路
- NOIP[2015] 运输计划