effective C++笔记之条款8: 写operator new和 operator delete 时要遵循常规

l        自己重写operator new时,很重要的一点是函数提供的行为要和系统缺省的operator new一致。实际做起来就是:要有正确的返回值;可用内存不够时要调用出错处理函数;处理0字节内存请求的情况。此外,还要避免不小心隐藏了标准形式的new。(条款9)

l        operator new包含一个无限的循环,跳出循环的唯一办法是内存分配成功或出错处理函数完成了条款7所描述的事件中的一种:得到了更多的可用内存;安装了一个新的new-handler;卸除了new-handler;抛出了一个std::bad_alloc或其派生类型的异常;或者返回失败。如果不做,operator new里面的循环就不会结束。

l        大多数针对类所写的operatornew都是只为特定的类设计的,不是为所有的类,也不是为它所有的子类设计的。基类的operatornew可能会被调用去为另一个子类对象分配内存。解决办法为把这个错误数量的内存分配请求转给标准::operator new来处理。

l        关于数组的分配,写operatornew[],面对的是原始内存,并不知道数组里有多少个对象,每个对象有多大。

l        operator delete,C++保证删除空指针是安全的。内存释放程序要处理空指针。

l        operator delete的类成员版本,必须检查被删除的对象的大小。假设类的operator new将“错误”大小的分配请求转给::operatornew, 那么也必须将“错误”大小的删除请求转给::operatordelete;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值