string *str1 = new string;
string *str2 = new string[100];
上面的代码分别为str1和str2分配指定的内存。当调用new 操作符时,有两件事发生了:
第一: 首先编译器调用operator new函数分配内存。
第二: 编译器将会调用一个或者多个构造函数来初始化内存。
delete str1;
delete[] str2;
同样地,调用delete操作符时也会有两件事发生:
第一: 编译器调用一个或者多个析构函数
第二:编译器调用operator delete函数释放内存。
如果把释放内存改成以下形式:
delete[] str1;
delete str2;
其结果是不可预测的,为了避免这种情况,最简单的方法就是如果调用new时用了[],调用delete时也要用[]。如果调用new时没有用[],那调用delete时也不要用[]