realloc函数,适用于使用new而不是realloc分配的内存

时间:2009-07-24 19:27:07

标签: c++ memory-management

我知道有一个realloc函数允许我调整内存块的大小(并且它与自由函数配对)。但是,我正在尝试对c ++类执行相同操作,其中一些成员指针使用 new 而不是 realloc 分配内存。在c ++中是否有与 realloc 相同的关键字,当内存使用new / delete而不是malloc或realloc和free进行配对时,我可以实现相同的目标吗?

提前致谢。

5 个答案:

答案 0 :(得分:3)

不,没有。坦率地说,如果你使用新的或新的[]。您的C ++代码可能设计得不好。看看使用 std :: vector 而不是new [],并使用值代替new。

答案 1 :(得分:2)

我不知道是否有一个,但你可以使用一个向量,因为你只是调整一个元素数组:)

std::vector<char> iVector(1000); // 1000 element as initial size

iVector.resize(2500); // resize the vector to 2500 elements

// or just use it without worrying about memory management

答案 2 :(得分:2)

如果我理解你的问题,你有一个分配一些可变长度内存的类。有两种可能的情况:

内存包含C ++对象

你别无选择:内存应该直接或间接地用new分配,因为你需要调用构造函数。

如果您想拥有类似realloc的行为,请不要使用new []。请使用std :: vector,它将正确处理所有分配/重新分配/自由和构造/破坏。

内存是原始的

你可以使用new []或malloc,因为你正在分配POD(一组int,或short,哑结构等)。

但是再次,new []不会为你提供类似realloc的行为......但如果你开始使用malloc,那么你必须做家务,即一定要在正确的时间免费打电话,记住大小某个地方的数组,甚至可能有一个与数组容量不同的大小(即你分配更多,以避免做太多的reallocs)。

你知道吗? std :: vector已经为你做了这一切。

结论

您正在使用C ++进行编码,然后解决您的问题(即在类中分配可变长度内存),如前面的答案已经表达的那样,使用std :: vector

答案 3 :(得分:0)

看一下vector如何使用placement new来初始化,复制(移动)和在内存中销毁对象,原则上是'realloc'-ated。在实现像vector这样的东西方面有相当多的工作,所以我只想使用vector ...它为所有对象使用一个连续的内存块,因此你可以将它用于期望数组的函数。并且,它隐含地跟踪对象的数量......

当然,这种便利带来了成本 - 它在幕后的堆上分配内存。 因此,如果你完全知道你只需要一个合理大小的数组,那么堆栈上的数组就不会被打败。

BR 每

答案 4 :(得分:-3)

没有。只需使用malloc / realloc / free,有什么问题?