在c++中,释放new分配的内存空间时,使用delete和delete[]是不是有区别?详细说明下

2024-12-26 05:28:45
推荐回答(3个)
回答1:

C++标准上规定的是:new出来的空间,必须由delete释放,new []出来的空间,必须由delete[] 释放。如果混用,会导致未定义行为。
所谓未定义行为顾名思义,C++标准中未定义,结果可能很正常,也可能不对头,甚至可能让你的程序崩溃。

实际上部分编译器中,一般情况下你一定程度的混用也是ok的(但也仅限于简单数据,如果是重载了operator new[]/delete[]的代码,可能导致灾难性的后果),但不代表所有编译器都如此,因为这个不是C++标准上的规定。所以强烈建议不应混用delete和delete[],必须和new/new[]配对使用。

参见C++大师Marshall Cline写的C++FAQ中16.11章节:

回答2:

对于分配的基本数据类型空间时,delete和delete[]是一样的;
但对于自己定义的类,当用new[]分配空间时,delete只会释放第一个,而delete[]则会释放所有。
所以,简单点说,记住这个使用原则:new 和 delete配套使用,new[] 和 delete[] 配套使用。

回答3:

在C++中new和delete是一组开辟/删除单个空间,new[]和delete[]是一组开辟/删除连续多个空间。不能混用的,会产生不可预知的后果。