zoukankan      html  css  js  c++  java
  • More Effective C++ 条款13 以reference方式捕捉exception

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

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

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

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

  • 相关阅读:
    python-opencv-绘图函数
    sublime下package control安装无效解决
    关于vue.js中slot的理解
    关于vue.js父子组件数据传递
    oAuth2.0及jwt介绍
    nodejs文件上传组件multer使用
    nodejs设置服务端允许跨域
    添加swagger api文档到node服务
    关于for循环里面异步操作的问题
    nodejs记录2——一行代码实现文件下载
  • 原文地址:https://www.cnblogs.com/reasno/p/4603326.html
Copyright © 2011-2022 走看看