《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表达式中使用[]。    

你可能感兴趣的:(C++,effective,Linux学习)