5

使用单个关键字很难实现删除数组吗?效率低吗?

4

4 回答 4

15

首先,让我总结一下两者的作用:为一个delete对象调用析构函数并释放内存;调用一些对象的析构函数并释放内存。delete[]

可以将它们折叠成相同的操作:“调用一些对象的析构函数并释放内存。”。毕竟一个一些数字。

两者都对指针进行操作deletedelete[]像这个:

foo* ptr;

仔细看看。并告诉我我们应该调用多少个析构函数delete。你不能。编译器也不能。这只能在运行时知道。有关对象数量的信息必须存储在某个地方。这意味着,对于 的每次使用new[],都会分配一些额外的内存来跟踪该数字。

C++ 是建立在“你不为你不使用的东西付费”的原则之上的,这就是非数组形式存在的原因:因为delete总是只删除一个对象,new不需要分配任何额外的东西。

于 2012-06-12T15:43:30.073 回答
6

问题不在于复杂性,而在于参数delete是单个指针,并且无论分配单个元素还是数组,该类型都完全相同。下面的实现是完全不同的,因为被破坏的元素数量不同。

这实际上是与 C 向后兼容的问题......如果从一开始就没有要求,我们可能不会有 C++(它不会赶上这么多),但类型new T[N]可能与类型不同ofnew T和类型系统可用于检测delete需要调用的类型。

于 2012-06-12T15:42:10.517 回答
5

这是因为 C++ 设计的最重要原则之一是不用为不用的东西付费。 new[]/delete[]有额外的成本,并且人们认为它们的实用性(我在 25 年的 C++ 中从未使用过。)非常有限,因此没有理由将此成本添加到非数组new/delete中。

于 2012-06-12T15:45:21.267 回答
-3

如果易于实现,就不能从语言事件中删除此类功能。在这样的更改之后,你愿意来修复我所有的代码吗?

于 2012-06-12T15:40:33.687 回答