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

《Effective C++ 中文版 第三版》读书笔记

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

我们看下面的例子:

typedef std::string AddressLines[4];

由于 AddressLines 是个数组,如果这样使用 new:

std::string* toby = new AddressLines; //< 注意,“new AddressLines” 返回一个 string*,就像 “new string[4]” 一样。

那就必须匹配 “数组形式” 的 delete:

delete toby;      //< 行为未定义
delete [] toby;   //< 正确

为避免诸如此类的错误,最好尽量不要对数组形式做 typedef 动作。这很容刈,因为 C++ 标准程序库含有 string、vector 等 templates,可将数组的需求降至几乎为零。

例如可以将上面例子中的 AddressLines 定义为 “由 string 组成的一个 vector”,也就是其类型为 vector

请记住:
如果你在 new 表达式中使用 [],必须在相应的 delete 表达式中也使用 []。如果你在 new 表达式中不使用 [],一定不要在相应的 delete 表达式中使用 []。

你可能感兴趣的:(条款 16:成对使用 new 和 delete 时要采取相同形式)