在程序员当中流传有一个众所周知的传说:对于内置类型,使用delete 代替delete []来释放内存是完全可以的。例如,
int *p=new int[10];
delete p; /*bad; should be: delete[] p*/
这是完全错误的方式。在C++标准明确指出,使用delete来释放任何类型的动态分配的数组,将会导致未定义行为。事实上,在某些平台上应用程序使用delete而非delete[]但是不死机可以归结为纯粹的运气:例如,针对内置数据类型,Visual C++通过调用free()同时实现了delete[]和delete。但是,我们并不能保证的Visual C++未来版本中将仍然坚持这么做。此外,也不会保证这个代码将适用于其他的编译器。总括来说,使用delete来代替delete [],或者用delete []来代替delete都很危险,应当尽量去避免。
copyright:2016-2020|邮箱:imalib@vip.163.com
蜀ICP备16020986号