Effective C++条款16:资源管理之(成对使用new和delete时要采取相同形式)
原创
©著作权归作者所有:来自51CTO博客作者董哥的黑板报的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、概念
- 如果申请(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表达式中使用[]