【发布时间】:2013-01-27 22:58:29
【问题描述】:
可能重复:
Why [] is used in delete ( delete [] ) to free dynamically allocated array?
Why does C++ still have a delete[] AND a delete operator?
我想知道它们有什么区别,我知道一些人可能会说的明显答案,一个是删除一个数组,另一个是删除一个对象,但我想知道为什么应该有两种不同的删除方法这两个操作?我的意思是删除基本上是使用 C free 方法实现的,它不关心指针实际上是指向数组还是单个对象。我能想到的唯一原因是两个能够知道它是否是一个数组并为每个单元格调用析构函数,而不仅仅是第一个对象,但这也是不可能的,因为编译器无法猜测数组的长度只是看着它指针。顺便说一句,虽然据说会调用未定义的行为来调用 delete 以获取使用 new[] 分配的内存,但我无法想象任何可能出错的事情。
【问题讨论】:
-
请注意,它们不是在编译器级别实现的,而是在标准库中作为
::operator delete(void*)和::operator delete[](void*)实现的 -
@Zaffy:不完全是。你在谈论默认的释放功能。一方面,它们只是默认值,另一方面,释放只是
delete表达式的最后一部分。 -
您可能会发现阅读 Itianum C++ ABI 的“数组 cookie”部分很有趣。
标签: c++ memory-management