如何扩展动态分配的数组

时间:2016-01-31 02:40:14

标签: c++ arrays

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

2 个答案:

答案 0 :(得分:2)

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

我看到了两种可能的方法:

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

答案 1 :(得分:2)

您有两种可能性:

  • new[]分配,通过将元素复制到分配有new[]的新数组和旧数组delete[]进行扩展。最后,当你完成时还有一个delete[]

  • 使用std::malloc分配,使用std::realloc展开,使用展示位置调用构造函数/析构函数 - new和显式析构函数调用,并使用std::free取消分配。< / p>