C++ 是否删除单个对象数组?
我不确定这两个作品是否都要删除:C++ 是否删除单个对象数组?,c++,arrays,memory-management,C++,Arrays,Memory Management,我不确定这两个作品是否都要删除: p = new int[1]; delete p 及 如果两者都起作用,那么上述两个deletes之间的区别是什么?delete p只删除一个元素删除[]p删除数组。如果使用新类型[],则使用删除[] 如果您是new拥有[],则delete拥有[] 顺便说一句,在某个地方一定有一个确切的副本 一个实例的数组仍然是一个数组。这里没有特殊情况,所以需要将其视为数组而不是单个对象。非数组delete可能会崩溃 对象数组的前面可以有一个表示数组大小的数字。如果是这种
p = new int[1];
delete p
及
如果两者都起作用,那么上述两个
delete
s之间的区别是什么?delete p
只删除一个元素<代码>删除[]p删除数组。如果使用新类型[]
,则使用删除[]
如果您是new
拥有[]
,则delete
拥有[]
顺便说一句,在某个地方一定有一个确切的副本 一个实例的数组仍然是一个数组。这里没有特殊情况,所以需要将其视为数组而不是单个对象。非数组
delete
可能会崩溃
对象数组的前面可以有一个表示数组大小的数字。如果是这种情况,
delete[]
,而不是delete
,足够聪明,可以将正确的指针传递到free
,它们是不相同的。即使delete p
会编译,但在运行时可能会导致问题
delete p
将调用operator delete(void*)
其中asdelete[]
将调用operator delete[](void*)
。默认行为是delete[]
调用delete
,但如果已实现delete[]
的自定义运算符,则如果您只调用delete
将不会调用该运算符,您将遇到问题(可能是无声的问题)
好的经验法则是,如果在
新建
中使用[]
,请在删除
中使用它 new
和delete
必须匹配,否则您有未定义的行为。似乎在一个平台上工作是未定义行为的一种可能结果,这会严重破坏一切。不要这样做,这不是经验法则,不是要求。
delete [] p;