Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ new/new[]是否应与delete/delete[]匹配?_C++ - Fatal编程技术网

C++ new/new[]是否应与delete/delete[]匹配?

C++ new/new[]是否应与delete/delete[]匹配?,c++,C++,我知道当我们使用new/new[]分配内存时,我们应该分别使用delete/delete[]释放内存 问题是 我可以使用delete[]释放new分配的内存吗 比如说, int *pInt3 = new int; delete [] pInt3; pInt3 = NULL; T *pT3 = new T; delete [] pT3; pT3 = NULL; 谢谢否,您应该将new的非数组形式与非数组delete匹配,同样地,对于数组形式也是如此 见 这尤其好: [16.12]如果在删除通过

我知道当我们使用new/new[]分配内存时,我们应该分别使用delete/delete[]释放内存

问题是

我可以使用delete[]释放new分配的内存吗

比如说,

int *pInt3 = new int;
delete [] pInt3;
pInt3 = NULL;

T *pT3 = new T;
delete [] pT3;
pT3 = NULL;

谢谢

否,您应该将
new
的非数组形式与非数组
delete
匹配,同样地,对于数组形式也是如此

这尤其好:

[16.12]如果在删除通过新T[n]分配的数组时忘记了[]怎么办

所有的生命都会有灾难性的结局

使newt[n]和delete[]p之间的连接正确是程序员的责任,而不是编译器的责任。如果错误,编译器将不会生成编译时或运行时错误消息。可能会导致堆损坏。或者更糟。你的程序可能会死掉

我可以使用delete[]来释放 内存由new分配


是的,你可以,但如果你这样做了,你会感到抱歉。

我想你对标准的参考以外的任何东西都不满意,所以这里就是

您可以在C++03标准的3.7.3.2中找到它

3提供给标准库中提供的解除分配函数之一的第一个参数的值可以是空指针值;如果是,对delocation函数的调用将无效。否则,提供给标准库中运算符delete(void*)的值应为先前调用标准库中运算符new(size_t)或运算符new(size_t,const std::nothrow_t&)返回的值之一,提供给运算符delete[](void*)的值标准库中的值应为标准库中先前调用运算符new[](size_t)或运算符new[](size_t,const std::nothrow_t&)返回的值之一


因此,您的问题的答案是否定的。

既然您已经知道答案,为什么还要问这个问题?如果可能的话,让delete[]和delete都没有任何意义。@wnoise,我问这个问题的原因是新的int或新的T是为了创建一个大小为1的数组。因此,如果使用delete[]的话,它似乎应该会起作用thxq0987:为什么要浪费时间去思考它在某些特定情况下是否有效?只需使用
delete
的匹配表单,继续您的工作。当然,编程还有比反复出现的关于
new/delete/new[]/delete[]
i++=+++i+i++
的SO问题更有趣的方面需要讨论。q0987:不,T类型的单个对象和大小为1的T类型数组之间存在差异。数据的实际内存分配可能是相同的(一项类型为T),但分配的数据的簿记不太可能完全相同。特别是,对于长度为1的数组,长度为1的数组需要存储在某个位置,但对于单个元素则不需要。我的问题是,如果我在删除分配的对象时总是使用[]怎么办。-感谢you@q0987-实现
new[]
的方式可能不同于标量
new
的实现方式,并且根据C++03标准,对未分配相应
new[]的指针调用
delete[]
<代码> >电话是不确定的。你可以给我一个链接,以便我可以参考上面描述的C++标准吗?@ Q0897—你必须得到一个标准的拷贝,它是30美元。我买了我的。您可以在此处免费获得下一个标准的草稿:。在该文件中,您可以在3.7.4.2项下的第3项下找到它。