为什么在C++中存在delete[]语法?

8 浏览
0 Comments

为什么在C++中存在delete[]语法?

每当有人在这里问关于delete[]的问题时,总是会有一个相当通用的回答:“这是C++的做法,使用delete[]”。作为一个纯C背景的人,我不明白为什么需要有不同的调用方式。

对于malloc()/free(),你的选择是获取一个连续的内存块的指针,并释放一个连续的内存块。在实现层面,有一个东西知道你分配的块的大小,基于基地址,以便在你需要释放它时使用。

没有free_array()这样的函数。我在其他与此有关的问题中看到了一些疯狂的理论,比如调用delete ptr只会释放数组的顶部,而不是整个数组。或者更正确的说法是,这没有被实现定义。当然...如果这是C++的第一个版本,并且你做了一个奇怪的设计选择,那是有道理的。但是,为什么在如今的C++标准下还没有进行重载呢?

似乎C++添加的唯一额外部分就是遍历数组并调用析构函数,我认为这可能是关键所在,它实际上是使用一个单独的函数来为我们节省一次运行时长度查找,或者以在列表末尾使用nullptr来换取折磨每个新的C++程序员或者那些有一天思维不清晰忘记有一个不同的关键字的程序员。

请有人能最终澄清一下,除了“这是标准规定,没有人质疑”,还有其他原因吗?

0