More Effective C++ 条款13 以reference方式捕捉exception
2015-06-26 22:38
387 查看
1. 由条款12知,如果catch子句捕获异常采用按值传递,那么被抛出的异常要被复制两次,这降低了效率,而且将派生类对象传给基类对象有可能会产生切割问题,但是按值传递也有它的好处,在catch子句重新throw异常的时候,它可以选择throw经catch子句处理过的异常还是原来的异常,这增加了灵活性(throw;)
2. 按指针传递似乎可以避免异常的复制,(虽然指针还是要被复制,不过4字节的代价不高),但是要注意指针指向的不能是局部对象,因为局部对象会被销毁,这就要求指针指向动态分配的内存,但由此又产生额外问题,那就是内存释放问题,使用者必须时刻注意内存的释放,这加重了负担,而且程序员还必须知道指针指向的是不是动态分配的内存。
3. 按引用传递对象只需要被复制一次,同时也可以避免传入catch子句时对象的切割问题,同时也支持多态(虚函数调用时的RTTI),但重新throw的时候仍然不能避免切割问题(除了使用“throw;"语句)
4. 注:《More Effective C++》中在这一节提倡使用按引用传递,但我认为按引用与按值各有其优缺点(不过按引用传递优点确实多一些),不过按指针传递还是不要使用为好。
2. 按指针传递似乎可以避免异常的复制,(虽然指针还是要被复制,不过4字节的代价不高),但是要注意指针指向的不能是局部对象,因为局部对象会被销毁,这就要求指针指向动态分配的内存,但由此又产生额外问题,那就是内存释放问题,使用者必须时刻注意内存的释放,这加重了负担,而且程序员还必须知道指针指向的是不是动态分配的内存。
3. 按引用传递对象只需要被复制一次,同时也可以避免传入catch子句时对象的切割问题,同时也支持多态(虚函数调用时的RTTI),但重新throw的时候仍然不能避免切割问题(除了使用“throw;"语句)
4. 注:《More Effective C++》中在这一节提倡使用按引用传递,但我认为按引用与按值各有其优缺点(不过按引用传递优点确实多一些),不过按指针传递还是不要使用为好。
相关文章推荐
- C/C++ 内置类型转换注意点
- 开始学习C++心得实例(6)
- 【leetcode c++】28 Implement strStr()
- C++中堆和栈的完全解析
- C++对象内存分布(2) - 菱形继承(non virtual)
- C++ 虚函数表解析
- More Effective C++ 条款12 了解”抛出一个exception"与“传递一个参数”或“调用一个虚函数”之间的差异
- 黑马程序员--c语言函数
- Motion sensing game (Ping Pong Game)
- 随机函数rand()[c++]
- 黑马程序员--c语言各种运算
- c++ 设计模式.pdf
- [C++]水仙花数
- 提高C++程序运行效率的10个简单方法
- c语言函数回调函数回调
- 进程、线程同步互斥学习 —— 事件
- 黑马程序员--c语言指向函数的指针
- More Effective C++ 条款11 禁止异常流出destructor之外
- 黑马程序员--c语言指针的基本知识
- C++运算符重载代码分析