如何扩展动态分配的阵列
How to extend a dynamically allocated array
我正在编写自己的数组类(如std::vector
),其主要数据是指向数组开头的指针。在内存中分配 8 个元素后,我想使数组的大小更大。有什么方法可以检查数组结束后的内存是否可用?如果是,我怎样才能获得它?谢谢。
您无法直接获取与已分配块相邻的新内存。一切都是不透明的,由操作系统和应用程序 RTL 的内存管理器框架管理。
我看到 2 种可能的方法:
- 使用
new[]
分配较大的块,将现有数据复制到其中,然后使用delete []
删除原始块。- 对内部缓冲区使用 C 内存分配函数 (
malloc
/calloc
),以便您可以使用realloc
来扩展它。但这可能会变得棘手,因为您没有自动管理缓冲区中包含的对象的构造/销毁。
你有两种可能性:
-
使用
new[]
进行分配,通过将元素复制到分配了new[]
的新数组来扩展,并delete[]
旧数组。最后,完成后再delete[]
一次。
使用 std::malloc
分配,使用std::realloc
扩展,使用放置new
和显式析构函数调用自己调用构造函数/析构函数,并使用std::free
进行释放。
相关文章:
- 二维阵列的动态分配
- 英特尔并行工作室 2015 C++中的 2D 动态分配全局阵列
- 动态分配'string'阵列
- 如何在C 中创建动态分配的2D结构阵列
- 动态分配的结构阵列具有动态分配的结构阵列元素
- 动态分配的输入,并在C 中输出2D阵列
- 从动态分配的阵列获取内存泄漏
- 在动态分配的多维阵列后清理
- 如何在C++中为灵活阵列动态分配内存
- 正确转发到动态分配的阵列的专用化
- 为动态分配的阵列分配更多内存
- 将动态分配的阵列复制到更大的阵列,而不会发生内存泄漏
- 如何高效地克隆动态分配的阵列
- 如何扩展动态分配的阵列
- 常规 2D 阵列与动态分配的 2D 阵列
- 动态分配的阵列,双释放或损坏
- 动态分配 3D 阵列
- 需要一个代码来动态分配 >1GB 内存阵列在 Visual Studio C++
- C++动态分配的2D阵列内存过度分配
- 在c++中动态分配2D阵列的行