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++》中在这一节提倡使用按引用传递,但我认为按引用与按值各有其优缺点(按引用传递优点确实多一些),不过按指针传递还是不要使用为好。

  • 相关阅读:
    字符串形式导入模块
    pycharm 远程环境开发调试
    ubuntu 18.04 及初始化python3环境
    nbu备份虚拟机
    转载
    linux/centos/rhel同时安装oracle10g和11g
    多进程
    drf笔记
    单例模式
    常用模块
  • 原文地址:https://www.cnblogs.com/reasno/p/4603326.html
Copyright © 2011-2022 走看看