gpt4 book ai didi

c++ - 为什么我们甚至需要 "delete[]"运算符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:37:58 26 4
gpt4 key购买 nike

这个问题困扰了我一段时间。我一直认为 C++ 应该设计成 delete 运算符(不带括号)甚至可以与 new[] 运算符一起工作。

在我看来,这样写:

int* p = new int;

应该等同于分配一个包含 1 个元素的数组:

int* p = new int[1];

如果这是真的,delete 操作符总是可​​以删除数组,我们就不需要 delete[] 操作符了。

在 C++ 中引入 delete[] 运算符有什么原因吗?我能想到的唯一原因是分配数组的内存占用很小(您必须将数组大小存储在某处),因此区分 deletedelete[] 是一个小的内存优化。

最佳答案

这样各个元素的析构函数就会被调用。是的,对于 POD 数组,没有太大区别,但在 C++ 中,您可以拥有具有非平凡析构函数的对象数组。

现在,你的问题是,为什么不让 newdelete 表现得像 new[]delete[] 并摆脱 new[]delete[]?我会回顾 Stroustrup 的“设计与进化”一书,他在书中说,如果您不使用 C++ 功能,则不必为它们付费(至少在运行时)。现在,newdelete 的行为与 mallocfree 一样有效。如果 delete 具有 delete[] 的含义,那么在运行时会有一些额外的开销(正如 James Curran 指出的那样)。

关于c++ - 为什么我们甚至需要 "delete[]"运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com