关于delete p和delete []p的区别所在
(问题参见:http://community.csdn.net/Expert/topic/4402/4402653.xml)
在VC下,对于char int之类的内建数据类型,在debug下效果的确相同,也就是
char *p=new char[10];
delete p;跟delete []p;效果相同。(可能因为#define new DEBUG_NEW这句话)
但在Release下,
前者存在一定问题,内存貌似并没有被回收。(这个问题还需要进一步测试验证。)
对于非内建类型,正如Mackz指出:
“delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。”
在MoreEffectiveC++中有更为详细的解释:
“当delete操作符用于数组时,它为每个数组元素调用析构函数,然后调用operator delete来释放内存。”
在其他编译器上没有测试。
因此,出于谨慎考虑,还是用delete[]来释放比较好。
至少看上去可读性更好一点。
望一起讨论的几位哥们进来领分。