std::string* stringPtr1=new std::string;
srd::string* stringPtr2=new std::string[100];
对应地 delete也应该使用相同的形式:
delete stringPtr1;
delete [] stringPtr2;
规则就是:使用new时用了[],必须在对应调用delete时也要使用[]。
如果new时没有用[],则调用delete时也不该用[]
在typedef中也一样:
当程序员以new创建tyoedef类型对象时,该以哪种delete形式删除之。
typedef std:: string AddressLines[4];//每个人的地址有4行,每行是1个string
由于AddressLines是个数组,如果这样使用new:
std::string* pa1 = new AddressLines;
那就必须匹配“数组形式”的delete:
delete pa1;//行为未定义;
delete [] pa1;//OK
为避免此类错误,尽量不要对数组形式做typedef动作。
记住:
如果在new表达式中使用[],必须在相应的delete表达式中也使用[]。
如果在new表达式中不使用[],则一定要在delete表达式中使用[]