【读书笔记】Effective C++(08)定制new和delete

栏目: C++ · 发布时间: 6年前

内容简介:作者:LogM本文原载于

作者:LogM

本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~

8. 定制new和delete

  • 8.1 条款49:了解new-handler的行为

    • new-handler相当于new的异常处理函数。new申请内存发生异常,调用new-handler处理,处理完了之后继续尝试new,如果还是出错,继续调用new-handler,以此反复。
    • //标准库对于new-handler是这么写的:
      //new_handler被定义成一个函数指针
      //set_new_handler函数的参数是个指针,指向new无法分配足够内存时应该调用的函数;
      //set_new_handler函数的返回值是个指针,指向set_new_handler之前设置的new_handler函数
      namespace std {
          typedef void (*new_handler)();
          new_handler set_new_handler(new_handler p) throw();
      }
      
      //可以这样使用set_new_handler
      void oufOfMem()
      {
          std::cerr << "Unalbe to new\n";
          std::abort();
      }
      int main()
      {
          std::set_new_handler(outOfMem);
          int * pBigArray = new int[10000000000L];
      }
    • 一般来说,new-handler函数会做以下事情的某几件:

      • a. 让更多内存可被使用。使得再次尝试new能成功。
      • b. 安装另一个new-handler。使用更强力的new-handler处理。
      • c. 卸载new-handler。实在不行,卸载new-handler使new抛出异常。
      • d. 抛出bad_alloc的异常。
      • e. 退出程序。abort()或exit()。
  • 8.2 条款50:了解new和delete的合理替换时机

    • 这部分讲的是:如果你觉得编译器自带的new和delete不好用,应该怎么写一个自定义的函数替换。
    • 作者自己也提到了,要自定义new和delete不是简单写个函数就好了,内存的申请和释放会涉及到计算机体系架构中比较底层的东西,比如"内存对齐"。所以重头开始写new和delete是比较复杂的,可以买现成的商业产品,或者在开源代码上修改。
  • 8.3 条款51:编写new和delete时需要固守常规

    • 条款50已经说明了,自定义new和delete比较复杂,非必要不建议重写。
    • 这部分讲了自定义new和delete时需要注意的事项:

      • operator new应该内含一个无穷循环,并在其中尝试分配内存,分配不了,调用new-handler。
      • operator new对0 bytes的内存申请,也需要正常返回指针。
      • operator delete应该在收到null指针时不做任何事。
  • 8.4 条款52:写了placement new也要写placement delete

    • Widget* pw = new Widget
      //这句话中总共有2个函数被调用:1.operator new分配内存;2.Widget的构造函数
      //当调用Widget构造函数发生异常时,需要delete掉第一步new出来的内存
      //如果使用C++自带的new和delete,这个情况不需要用户考虑;如果是自定义new和delete,需要用户考虑

以上所述就是小编给大家介绍的《【读书笔记】Effective C++(08)定制new和delete》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精益创业

精益创业

[美] 埃里克·莱斯 / 吴彤 / 中信出版社 / 2012-8 / 49.00元

《精益创业:新创企业的成长思维》内容简介:我们正处在一个空前的全球创业兴盛时代,但无数创业公司都黯然收场,以失败告终。精益创业代表了一种不断形成创新的新方法,它源于“精益生产”的理念,提倡企业进行“验证性学习”,先向市场推出极简的原型产品,然后在不断地试验和学习中,以最小的成本和有效的方式验证产品是否符合用户需求,灵活调整方向。如果产品不符合市场需求,最好能“快速地失败、廉价地失败”,而不要“昂贵......一起来看看 《精益创业》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具