这是一个唠叨我一段时间的问题。我一直认为应该设计C++,以便即使使用“new []”运算符,“删除”运算符(无括号)也能工作。为什么我们甚至需要“delete []”运算符?
在我看来,写这个:
int* p = new int;
应相当于分配1个元素的数组:
int* p = new int[1];
如果这是真的,“删除”操作者总是可以删除数组,而我们不需要“delete []”运算符。
为什么在C++中引入“delete []”运算符有什么原因吗?我能想到的唯一原因是分配数组的内存占用量很小(您必须将数组大小存储在某处),因此区分“delete”和“delete []”是一个小内存优化。
实际上,当你使用new int [1]时,它在第一个数据之前存储在数组的头部,它的大小。因此,使用delete而不是delete []不会释放该部分内存。 – Rodrigo 2009-04-24 13:35:03