删除C+中的每个指针是否安全+;作为指向数组的指针? 在C++中删除每个指针作为数组指针是否安全?< /P>

删除C+中的每个指针是否安全+;作为指向数组的指针? 在C++中删除每个指针作为数组指针是否安全?< /P>,c++,arrays,pointers,delete-operator,C++,Arrays,Pointers,Delete Operator,如果我总是写delete[]ptr,而不管ptr实际上是什么,不管它是指向单个对象的指针还是对象数组,这对我来说是好的吗?不,不会。使用delete[]删除未分配给new[]的内容会产生未定义的行为。你为什么要这么做?您分配了内存,因此应该知道如何删除它。有关更多信息,请参阅。@wally查看我添加了链接的cppreference页面。只要每个指针都分配了new[],就可以安全地删除[]每个指针。即使它是新的foo[1]。否则,不。。。这会使我的机器上的程序崩溃。(因为我的环境有不同的堆,分别是

如果我总是写
delete[]ptr
,而不管
ptr
实际上是什么,不管它是指向单个对象的指针还是对象数组,这对我来说是好的吗?

不,不会。使用
delete[]
删除未分配给
new[]
的内容会产生未定义的行为。你为什么要这么做?您分配了内存,因此应该知道如何删除它。有关更多信息,请参阅。

@wally查看我添加了链接的cppreference页面。只要每个指针都分配了
new[]
,就可以安全地删除[]每个指针。即使它是
新的foo[1]
。否则,不。。。这会使我的机器上的程序崩溃。(因为我的环境有不同的堆,分别是
new
new[]
malloc
)@wally事实上,这句话并不完全正确:
new
表达式不需要提到
[]
就必须
删除[]
使用array=int[10]; int*a=新数组new int
可能等同于
new int[1]
),或者您不想跟踪如何分配某些内容的细节。在您的
malloc
/
delete
示例中更是如此;如果您与C库接口,您可能实际上很难跟踪哪些指针来自何处。@paulsm4我认为用例是:“我不想检查如何分配该对象,无论是使用
new
还是
new[]
,我希望有一个通用的
删除
,可以在所有情况下使用”