Effective C++学习---08.定制new和delete

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

  • set_new_handle允许客户指定一个函数(new-handler),在内存分配无法满足时被调用,只有当new_handler==nullptr时,operator new才会抛出异常
  • nothrow new是一个颇为局限的工具,只能保持new操作不抛出异常,但无法保证后续类的构造函数不抛出异常

条款50:了解new和delete的合理替换时机

  • 用来检测运用上的错误(用户可以添加一些自己的机制,检测内存使用或释放上的错误)
  • 为了强化效能
  • 为了收集使用上的统计数据

条款51:编写new和delete时需固守常规

  • operator new应该内含一个无穷循环,并在其中尝试分配内存,如果它无法满足内存需求,就该调用new-handler。它也应该有能力处理0bytes申请 。Class的定制版new,则还应该处理“比正确大小更大的申请”(考虑类的继承)
  • operator delete应该在收到nullptr指针时不做任何事。Class的定制版delete,则还应该处理“比正确大小更大的申请”(考虑类的继承)

条款52:写了placement new(operator new接受的参数除了std::size_t之外还有其他的参数)要写placement delete

  • 当写一个placement operator new,也要写出对应版本的placement operator delete,因为在调用new的时候,一旦抛出异常,运行时系统需要找出对应的delete版本来释放内存,否则运行时系统什么也不做,会导致内存泄露。对应版本的意思是placement operator new和placement operator delete的参数对应起来
  • 当你声明placement new和placement delete,确定不要无意义地遮掩它们的正常版本(条款33中---符号名称在不同作用域中可能被遮掩)
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值