《Effective C++》学习笔记条款16 成对使用new和delete时要采取相同形式

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

       先看下一下代码:
     std::string*stringArray = new std::string[100];
     ...
 
     delete stringArray;

       使用了 new 动态申请了资源,也调用了 delete 释放了资源。但这代码存在 不明确行为 stringArray 对象中的 99

太可能被适当删除,因为它们的析构函数很可能没被调用。

     

      当我们使用new,有两件事情发生:第一,内存被分配出来;第二,针对此内存会有一个(或更多)构造函数被

调用。当你使用delete,也有两件事发生:针对此内存会有一个(或多个)析构函数被调用,然后内存才被

放。delete的最大问题在于:即将被删除的内存之内究竟有多少对象?这个问题的答案决定了有多少个析构函数必

被调用起来。

     

       解决以上问题事实上很简单:如果你调用new时使用[],你必须在对应调用delete时也使用[]。如果你调用new

没有使用[],那么也不该在对应调用delete时使用[]
    

       最好尽量不要对数组形式作typedefs动作。因为这样容易引起delete操作的疑惑(需不需要[]呢???)。
    

 请记住:

  • 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccwRadar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值