这是一个困扰我一段时间的问题。我一直认为应该设计C++,以便delete运算符(不带括号)甚至可以与new[]运算符一起使用。

我认为,这样写:

int* p = new int;

应该等效于分配1个元素的数组:
int* p = new int[1];

如果是这样,delete运算符可以一直在删除数组,而我们不需要delete[]运算符。

是否有任何理由在C++中引入delete[]运算符?我能想到的唯一原因是分配数组的内存占用很小(您必须将数组大小存储在某个地方),因此区分deletedelete[]是一项小的内存优化。

最佳答案

这样就可以调用各个元素的析构函数。是的,对于POD数组没有太大区别,但是在C++中,您可以拥有带有非平凡析构函数的对象数组。

现在,您的问题是,为什么不让newdelete表现得像new[]delete[]并摆脱new[]delete[]呢?我回头看看Stroustrup的“设计与演进”一书,他在书中说,如果您不使用C++功能,则不必为此付费(至少在运行时)。按照现在的样子,newdelete的行为将与mallocfree一样有效。如果delete具有delete[]的含义,那么在运行时将有一些额外的开销(如James Curran所指出的)。

关于c++ - 为什么我们甚至需要 “delete[]”运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/252515/

10-15 16:39