delete[]
的问题时,总会有一个相当普遍的回答:“这就是C++的做法,使用delete[]
”。作为一个纯C背景的人,我不明白为什么需要有不同的调用方式。使用
malloc()
/free()
时,你的选择是获取一个连续的内存块的指针,并释放一个连续的内存块。在实现层面,有一个东西知道你分配的块的大小,基于基地址,以便在你需要释放它时使用。没有
free_array()
这样的函数。我在其他与此有关的问题上看到了一些疯狂的理论,比如调用delete ptr
只会释放数组的顶部,而不是整个数组。或者更正确地说,这由实现定义。当然...如果这是C++的第一个版本,并且你做了一个奇怪的设计选择,那是有道理的。但是为什么在现在的C++标准下,它还没有被重载呢?似乎C++唯一额外增加的部分就是遍历数组并调用析构函数,我认为这可能是关键所在,它实际上是使用一个单独的函数来节省我们一个运行时长度查找,或者在列表末尾使用nullptr来换取折磨每个新的C++程序员或者那些有模糊的一天并忘记了有一个不同的保留字的程序员。
请有人能够最终澄清一下,除了“这是标准规定的,没有人质疑”之外,是否还有其他原因?