删除单个对象数组?

时间:2010-03-21 00:21:10

标签: c++ arrays memory-management

我不确定这些是否都可以删除:

p = new int[1];

delete p

delete [] p;

如果两者都有效,上述两个delete之间有什么区别?

3 个答案:

答案 0 :(得分:4)

一个实例的数组仍然是一个数组。根本没有特殊情况,因此您需要将其视为数组而不是单个对象。非数组delete可能会崩溃。

对象数组前面可能有一个表示数组大小的数字。如果是这种情况,delete[],而不是delete,足够聪明,可以将正确的指针传递给free

答案 1 :(得分:2)

他们相同。即使delete p会编译但可能在运行时导致问题。

delete p将调用operator delete(void*)delete []将调用operator delete[](void*)。默认行为是delete[]调用delete,但如果已实施delete []的自定义运算符,则只需调用delete即可调用[]会有问题(可能是一个问题)。

良好的经验法则是,如果您在new中使用了delete,请在{{1}}中使用它。

答案 2 :(得分:1)

delete p只删除一个元素。 delete [] p删除一个数组。如果您使用new type[],请使用delete []

如果您new[],那么delete会有[]

顺便说一句,必须要有一个完全重复的地方。