删除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=新数组你可以问“如果我用'malloc()'分配一个对象,可以用'delete'释放它吗?”答:不!问:你为什么会问这样的问题?只是随便说说。。。或者你有实际的用例吗?@paulsm4有合理的理由怀疑这一点。也许您想了解它是如何工作的(有理由认为new int
可能等同于new int[1]
),或者您不想跟踪如何分配某些内容的细节。在您的malloc
/delete
示例中更是如此;如果您与C库接口,您可能实际上很难跟踪哪些指针来自何处。@paulsm4我认为用例是:“我不想检查如何分配该对象,无论是使用new
还是new[]
,我希望有一个通用的删除
,可以在所有情况下使用”