我正在编写自己的数组类(如std::vector
),其主要数据是指向数组开头的指针。在我分配内存中的8个元素后,我想让数组的大小更大。有什么方法可以检查数组结束后的内存是否可用?如果是,我怎样才能获得它?谢谢。
答案 0 :(得分:2)
您无法直接获取与已分配块相邻的新内存。一切都是不透明的,由操作系统和应用程序RTL的内存管理器框架管理。
我看到了两种可能的方法:
new[]
分配更大的块,将现有数据复制到其中,然后使用delete []
删除原始块。malloc
/ calloc
),以便您可以使用realloc
来扩展它。但这可能会变得棘手,因为您没有自动管理缓冲区中包含的对象的构造/销毁。答案 1 :(得分:2)
您有两种可能性:
与new[]
分配,通过将元素复制到分配有new[]
的新数组和旧数组delete[]
进行扩展。最后,当你完成时还有一个delete[]
。
使用std::malloc
分配,使用std::realloc
展开,使用展示位置调用构造函数/析构函数 - new
和显式析构函数调用,并使用std::free
取消分配。< / p>