一、概念
- 如果申请(new)的对象为单一对象,那么在释放(delete)的时候就只要简单的释放即可
- 如果申请(new [])的对象为对象数组,那么在释放(delete [])的时候就要以[]释放之
二、演示案例
- 申请单一对象:
-
std::string* stringArray = new std::string;
-
delete stringArray; //正确的
-
//delete[] stringArray;错误的
- 申请对象数组:
-
std::string* stringArray = new std::string[100];
-
//delete stringArray;错误的
-
delete[] stringArray; //正确的
三、注意数组别名时的释放(typedef)
- 如果一个数组使用了别名,那么在释放的时候千万别忘记在delete后面加上[]
-
//将string[4]数组声明为AddressLines
-
typedef std::string AddressLines[4];
-
//相当于std::string* pal = new std::string[4];
-
std::string* pal = new AddressLines;
-
delete [] pal;//正确
-
//delete pal;错误的
四、总结
- 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]