我知道有一个realloc函数允许我调整内存块的大小(并且它与自由函数配对)。但是,我正在尝试对c ++类执行相同操作,其中一些成员指针使用 new 而不是 realloc 分配内存。在c ++中是否有与 realloc 相同的关键字,当内存使用new / delete而不是malloc或realloc和free进行配对时,我可以实现相同的目标吗?
提前致谢。
答案 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)
如果我理解你的问题,你有一个分配一些可变长度内存的类。有两种可能的情况:
你别无选择:内存应该直接或间接地用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,有什么问题?