码迷,mamicode.com
首页 > 编程语言 > 详细

More Effective C++ 条款13 以reference方式捕捉exception

时间:2015-06-26 23:35:15      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

1. 由条款12知,如果catch子句捕获异常采用按值传递,那么被抛出的异常要被复制两次,这降低了效率,而且将派生类对象传给基类对象有可能会产生切割问题,但是按值传递也有它的好处,在catch子句重新throw异常的时候,它可以选择throw经catch子句处理过的异常还是原来的异常,这增加了灵活性(throw;)

2. 按指针传递似乎可以避免异常的复制,(虽然指针还是要被复制,不过4字节的代价不高),但是要注意指针指向的不能是局部对象,因为局部对象会被销毁,这就要求指针指向动态分配的内存,但由此又产生额外问题,那就是内存释放问题,使用者必须时刻注意内存的释放,这加重了负担,而且程序员还必须知道指针指向的是不是动态分配的内存。

3. 按引用传递对象只需要被复制一次,同时也可以避免传入catch子句时对象的切割问题,同时也支持多态(虚函数调用时的RTTI),但重新throw的时候仍然不能避免切割问题(除了使用“throw;"语句)

4. 注:《More Effective C++》中在这一节提倡使用按引用传递,但我认为按引用与按值各有其优缺点(不过按引用传递优点确实多一些),不过按指针传递还是不要使用为好。

More Effective C++ 条款13 以reference方式捕捉exception

标签:

原文地址:http://www.cnblogs.com/reasno/p/4603326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!