如何扩展动态分配的阵列

How to extend a dynamically allocated array

本文关键字:动态分配 阵列 扩展 何扩展      更新时间:2023-10-16

我正在编写自己的数组类(如std::vector),其主要数据是指向数组开头的指针。在内存中分配 8 个元素后,我想使数组的大小更大。有什么方法可以检查数组结束后的内存是否可用?如果是,我怎样才能获得它?谢谢。

您无法直接获取与已分配块相邻的新内存。一切都是不透明的,由操作系统和应用程序 RTL 的内存管理器框架管理。

我看到 2 种可能的方法:

    使用
  • new[] 分配较大的块,将现有数据复制到其中,然后使用 delete [] 删除原始块。
  • 对内部缓冲区使用 C 内存分配函数 ( malloc/calloc ),以便您可以使用 realloc 来扩展它。但这可能会变得棘手,因为您没有自动管理缓冲区中包含的对象的构造/销毁。

你有两种可能性:

  • 使用 new[] 进行分配,通过将元素复制到分配了 new[] 的新数组来扩展,并delete[]旧数组。最后,完成后再delete[]一次。

  • 使用
  • std::malloc 分配,使用 std::realloc 扩展,使用放置new和显式析构函数调用自己调用构造函数/析构函数,并使用 std::free 进行释放。