【发布时间】:2010-09-12 09:26:24
【问题描述】:
为什么会有delete[]?据我了解,它对数组的行为不同。然而,它为什么真的存在呢? C中只有free,没有free_array。同样在语法上,delete var 和 delete []var 之间的唯一区别是 [] 没有参数(我没有告诉数组的长度)。
那么为什么delete[] 真的存在呢?我知道有人会说你可以超载delete 和delete[](至少我认为这是可能的)但是可以说我们没有超载它。为什么会存在?
【问题讨论】:
-
delete[] 的明显原因是它将调用数组元素的析构函数。见stackoverflow.com/questions/659270/…
-
@jamesdlin:因为我们并不总是有
std::vector?因为std::vector没有它们就无法工作? -
并且因为 C++ 语言允许用户自己实现
std::vector的行为,或者更有可能与std::vector相似但在某些有用方式上有所不同的其他东西。该语言旨在支持低级和专门的开发。 -
@Oli Charlesworth:但是您可以使用
realloc和放置new而不是new[]来实现std::vector(这将支持就地重新分配内存)。 -
实际上,我意识到如果需要移动内存,
realloc将不起作用,因为没有机会进行适当的复制构造和销毁。尽管如此,还是有malloc和free,而std::vector无论如何都不会直接使用new[];它使用指定的分配器。
标签: c++ delete-operator