一、概念
  • 如果申请(new)的对象为单一对象,那么在释放(delete)的时候就只要简单的释放即可
  • 如果申请(new [])的对象为对象数组,那么在释放(delete [])的时候就要以[]释放之

Effective C++条款16:资源管理之(成对使用new和delete时要采取相同形式)_Effective C++条款16

二、演示案例
  • 申请单一对象:
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表达式中使用[]