为什么最好以引用方式捕捉异常
来源:互联网 发布:精密减速机 知乎 编辑:程序博客网 时间:2024/06/05 10:31
捕捉异常的方式有三种:值传递、引用、指针
引用与值传递相比:
1.值传递会复制两次,传给catch时,抛出时都会复制。引用只复制一次,效率大大提高。
2.值传递会带来切割问题。当传递派生类对象给参数是基类对象的catch时,会导致切割,即派生类的派生类成员被切割,
只留基类的部分。
引用与指针相比:
1.抛出指针时,不需要复制对象,只需复制指针,效率增加,但是,不能抛出指向局部对象的指针,因为函数调用完毕,局部对象被
销毁。
2.抛出指向堆对象的指针时,new完之后没办法delete,因为没有办法知道传来的是全局对象或者static 对象或者是堆上的对象,所以,delete or not delete这就成一个问题了。
3.catch-by-pointer和语言本身建立起来的惯例有所矛盾。4个标准的异常:
<1>:bad_alloc 当operator new无法满足内存需求时抛出。
<2>:bad_cast 当对一个对象实行向下转换(dynamic_cast)失败时抛出。
<3>:bad_typeid 当dynamic_cast被实施与一个null指针时抛出。
<4>:bad_excepition 适用于未预期的异常情况。
综上:引用是最好的选择,它不会产生上述问题。
阅读全文
0 0
- 为什么最好以引用方式捕捉异常
- 为什么最好在c++中使用异常
- 为什么最好在c++中使用异常
- 异常捕捉
- 异常捕捉
- 捕捉异常
- 异常捕捉
- 捕捉异常
- 异常捕捉
- 关于Spring事物 异常捕捉之后处理方式
- 用ajax时候最好还是在action里面捕捉下异常
- 以实践的方式学习C++ &(引用)
- 函数的参数最好采用引用方式读入
- 引用fwpsk.h 异常解决方式
- 捕捉异常 (Visual C#)
- delphi异常信息捕捉
- 捕捉线程的异常
- 异常捕捉工具[转]
- VMware vSphere Web Services SDK编程指南(四)- vSphere API 编程模型(二)
- SVGDemo
- 抛除C++旧印象(一):C#List源码剖析
- 3、volley 官方教程-建立一个请求队列
- matlab GUI工作原理
- 为什么最好以引用方式捕捉异常
- 在Fragment中监听返回BACK按键
- 算法训练 友好数
- 筛选文件——文件过滤器
- 负载均衡原理
- ImageView ScaleType
- Mybatis源码解析之初始化配置文件封装为Configuration源码详解
- TensorFlow学习——CIFAR-10(一)
- 由前序遍历和中序遍历重建二叉树