EffectiveC++-条款16:成对使用 new 和 delete 时要采取相同形式

一. 内容

  1. 当你使用 new 动态生成对象时,有两件事发生:
    • 通过名为 operator new() 函数,分配内存
    • 针对此内存调用一个或多个构造函数
      当你使用 delete 删除分配内存时,上述事情以相反的方式同样发生。
  2. 但 delete 存在一个问题:我怎么知道有多少对象要被删除。更简单些,我怎么知道即将被删除的指针是指向单一对象还是数组。这个问题很重要,因为单一对象的内存布局一般而言不同于数组,数组所用内存还包括数组大小的记录,以便 delete 知道需要调用多少次析构函数
  3. 而让 delete 知道待删除的指针是否是数组的唯一方法是:由你来告诉它,即使用 [ ] delete
  4. 对于单一对象不要使用 [ ] delete ,对于数组对象不要使用 delete,两者都会引发未定义行为使得程序走向漫长的调试过程。也就是说 new 和 delete 的形式要保持一致。
  5. 对于使用 typedef 的程序员,务必清楚其类型,避免使用出错。而且一般没必要对数组进行 typedefs,因为C++标准库中的 vector,string 等 templates,足以代替数组。

二. 总结

  1. 如果你在new表达式中使用[ ],必须在相应的delete表达式中也使用[ ]。如果你在new表达式中不使用[ ],一定不要在相应的delete表达式中使用[ ]。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值