gpt4 book ai didi

c++ - delete[] 运算符是否处理通过指针返回的动态分配的内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:08 24 4
gpt4 key购买 nike

我想知道 delete[] 运算符如何处理函数返回 的指针,而不是在与 delete 语句相同的范围内进行动态分配。假设我有一个像这样的简单函数:

int *getArray()
{
int *returnVal = new int[3];
returnVal[0] = returnVal[1] = returnVal[2] = 0;
return returnVal;
}

现在,当我需要在代码中使用该数组时,我会执行以下操作:

int *vals = getArray();
// use values...
delete[] vals;

但是,我想知道,C++ 编译器如何知道分配的内存块有多大(以及要从 vals 中删除多少内存元素)?这是一种有效的技术,还是我必须单独删除每个数组值(如以下代码所示)?

int *vals = getArray();
// use values...
delete vals + 2;
delete vals + 1;
delete vals;

最佳答案

您应该只delete[] 通过new[] 获得的东西。在您的代码中,这是 getArray() 返回的值。删除任何其他内容都是非法的。

However, I'm wondering, how does the C++ compiler know how big the memory block that was allocated was.

每个实现都以某种方式存储分配的大小(以及我认为的类型)。

  • 一个常见的想法是存储簿记信息(或索引某种)就在实际分配的内存之前。
  • 另一个想法是使用实​​际指针作为保存所需信息的数据结构的键

当然,这个解释过于简单(更像是对 C 的解释)。在 C++ 中,有析构函数和诸如此类的附加细节。

关于c++ - delete[] 运算符是否处理通过指针返回的动态分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7514365/

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