C++ tips: throw和throw+对象的差别
2015-06-07 19:16
253 查看
今天搞代码,遇到一个关于C++中异常的re-throw问题。简单说就是猜catch块中不能/不想对捕捉到的异常做处理,将其再次throw时,应该如何操作。这里google了一下,参考了一下接个网址的描述
http://stackoverflow.com/questions/2274661/throwing-non-const-temporaries-by-reference http://stackoverflow.com/questions/1654150/scope-of-exception-object-in-c http://stackoverflow.com/questions/2360597/c-exceptions-questions-on-rethrow-of-original-exception
都是StackOverflow上的帖子,具体意思就是再次抛出异常对象时,不能使用throw+异常对象的方式,这样的方式会调用异常类的拷贝构造函数。
关键问题是,当我们使用一个异常类的基类做catch时(并且是引用catch),使用throw+异常对象的方式是调用的基类的拷贝构造函数,此时将会造成异常对象继承特性的丢失。
当然,要是异常对象类压根没有拷贝构造函数,那就只能呵呵了。
http://stackoverflow.com/questions/2274661/throwing-non-const-temporaries-by-reference http://stackoverflow.com/questions/1654150/scope-of-exception-object-in-c http://stackoverflow.com/questions/2360597/c-exceptions-questions-on-rethrow-of-original-exception
都是StackOverflow上的帖子,具体意思就是再次抛出异常对象时,不能使用throw+异常对象的方式,这样的方式会调用异常类的拷贝构造函数。
关键问题是,当我们使用一个异常类的基类做catch时(并且是引用catch),使用throw+异常对象的方式是调用的基类的拷贝构造函数,此时将会造成异常对象继承特性的丢失。
当然,要是异常对象类压根没有拷贝构造函数,那就只能呵呵了。
相关文章推荐
- 【学习笔记】【C语言】逻辑运算符
- 类模板相互引用的问题(错误:缺少类型说明符-假定为int。注意:C++不支持默认int)
- chapter11test5
- 类模板相互引用的问题(错误:缺少类型说明符-假定为int。注意:C++不支持默认int)
- C++中的explicit关键字
- 黑马程序员——OC语言基础——面向对象三大特性之继承
- C++文件读写详解(ofstream,ifstream,fstream)
- 二值图像边缘提取算法C语言实现
- c++ --> 复制构造函数
- c语言编写贪吃蛇修改后最新版
- c++ --> 构造函数与析构函数
- C 链表
- 浅谈工作中使用过的几种C++界面库
- 初学c++之template <typename T>
- c++模板学习
- C++ primer 箭头操作符重载心得体会
- uefi的c++编程支持new和delete
- 用C++写uefi程序
- 一起talk C栗子吧(第十二回:C语言实例--单链表一)
- C++ 调用system()函数的多命令合并