条款16:成对使用new以及delete的时候应该采取相同的形式
首先思考下面的代码:
1 string * stringArray = new string[100]; 2 ... 3 delete stringArray;
这是最常见的错误之一了,new与delete不配对,但是仔细想想new与delete为什么一定要配对呢?
可以想到一种可能就在分配数组的时候,可能记录了数组大小的信息,这样在delete的时候根据是delete或者是delete[]会由数组大小信息做出不同的判断。
一种可能的实现方式也许就像下面这样。
n,string0,string1,string2.......
这样在使用delete[]的时候就会根据这个n来决定释放的空间大小了。
还有就是最好不要去对数组去做typedef,直接用vector去代替可能更好,考虑下面这个例子:
typedef string strArray[4]; string * pal = new strArray;
那么在delete的时候可能就去这样做:
delete pal; (实际上这样做大错特错了)
delete [] pal;//这样才是对的啊。
小结:new与delete配对,new[]与delete[]配对,其实new[]的使用最好还是交给vector等容器来管理比较好一点。 而new的使用建议更换成自定义的一个RAII类来进行资源的管理而不要使用手动的new以及delete。