分类：电脑/网络-程序设计-C/C++
问题：请教delete和delete[]的区别最好与各例子来看，我知道 
最好与各例子来看，我知道delete是释放指针或者引用，delete[ ]是释放数组的。但是我看见有些地方，有混用的现象，而且也是可以执行的，我想问的问题是：怎样可以验证他们区别，说说方法，指点一下，谢谢。
回答：按照标准c++的说法:如果使用delete而不是delete[]释放new[],则可能导致旨在数组的首元素上调用析构函数,尽管被释放的数量可能是正确的。例如:假如有一个文件处理类FileStream,在他的析构函数中释放它所持有的文件资源。如果用new[]建立了一个FileStream数组,而用delete释放这个数组,则结果可能是:这个数组所占的内存成功释放了,但除了其第一个元素所持有的文件资源之外,所有的文件资源都没有被释放。这样很危险,对于这些文件资源的所有访问都会失败。不过这个东西应该是编译器相关的,有的编译器能够自动识别数组,所以,把delete[]写成delete可能没有问题,我做了以下这个测试程序:classtext{ (){p=newint(100);}~text(){deletep;}int*p;};int_tmain(intargc,_TCHAR*argv[]){text*pr=newtext[2];text*prr=pr++;int*pi=prr->p;deletepr;cout<<*pi<<endl;return1;}是在 下运行的,如果把"deletepr"前的"//"去掉,在运行时就有异常,说明deletepr的确完成了delete[]pr要做的工作,在所有类上都掉用了析构函数,也就是搂住感觉没区别的原因。虽然如此,但仍建议用delete[]释放new[],一是:增加代码的可移植性。二是增加代码的可读性,让人知道这是在释放数组