最佳答案
每次有人在这里问到关于 delete[]
的问题,总会有一个非常普遍的回答: “ C + + 就是这样做的,使用 delete[]
”。从一个普通的 C 背景出发,我不明白的是为什么需要一个完全不同的调用。
使用 malloc()
/free()
,您可以选择获得指向连续内存块的指针,并释放连续内存块。实现中出现了一些问题,并且知道您根据基地址分配的块的大小,以便在必须释放它时使用。
没有函数 free_array()
。我已经看到了一些与此相关的其他问题的疯狂理论,比如调用 delete ptr
只会释放数组的顶部,而不是整个数组。或者更正确的是,它不是由实现定义的。当然... 如果这是 C + + 的第一个版本,你做了一个奇怪的设计选择,这是有意义的。但是为什么 $PRESENT_YEAR
的 C + + 标准没有被超载呢? ? ?
这似乎是 C + + 添加的唯一额外的部分,通过数组和调用析构函数,我认为这可能是它的关键,它实际上是使用一个单独的函数来节省我们一个单独的运行时长度查找,或 nullptr
在列表的最后,作为折磨每一个新的 C + + 程序员或程序员谁有一个模糊的一天,忘记了有一个不同的保留字。
有没有人能一劳永逸地澄清一下,除了“标准是这么说的,没有人质疑”之外,还有什么原因?