Effective C++(16) 成对使用new和delete时要采取相同的形式
来看一个例子:
std::string* stringArray = new std::string[100]; ... delete stringArray;
- 内存被分配出来
- 针对此内存会有一个或更多个构造函数被调用
- 针对此内存会有一个或更多个析构函数被调用
- 内存被释放
std::string* stringPtr1 = new std::string; std::string* stringPtr2 = new std::string[100]; ... delete stringPtr1; delete[] stringPtr2;
typedef std::string AddressLines[4]; // 每个人的地址有4行,每行是一个string // 这时候AddresLines是一个数组,所以new时,应该是[]形式 std:string* pal = new AddresLines; // 相当于:new string[4]; //那么,必须匹配数组形式的delete delete pal; // error,行为未定义 delete[] pal; // pass
- 如果在new表达式中使用[],必须在相应的delete表达式中也使用[]
- 如果在new表达式中不使用[],一定不要再相应的delete表达式中使用[]
- 尽量不要对对象数组使用typedef动作
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。