这是一个困扰我一段时间的问题。我一直认为应该设计C++,以便delete
运算符(不带括号)甚至可以与new[]
运算符一起使用。
我认为,这样写:
int* p = new int;
应该等效于分配1个元素的数组:
int* p = new int[1];
如果是这样,
delete
运算符可以一直在删除数组,而我们不需要delete[]
运算符。是否有任何理由在C++中引入
delete[]
运算符?我能想到的唯一原因是分配数组的内存占用很小(您必须将数组大小存储在某个地方),因此区分delete
和delete[]
是一项小的内存优化。 最佳答案
这样就可以调用各个元素的析构函数。是的,对于POD数组没有太大区别,但是在C++中,您可以拥有带有非平凡析构函数的对象数组。
现在,您的问题是,为什么不让new
和delete
表现得像new[]
和delete[]
并摆脱new[]
和delete[]
呢?我回头看看Stroustrup的“设计与演进”一书,他在书中说,如果您不使用C++功能,则不必为此付费(至少在运行时)。按照现在的样子,new
或delete
的行为将与malloc
和free
一样有效。如果delete
具有delete[]
的含义,那么在运行时将有一些额外的开销(如James Curran所指出的)。
关于c++ - 为什么我们甚至需要 “delete[]”运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/252515/