C++ 重新分配C+的内存+;数组。

C++ 重新分配C+的内存+;数组。,c++,new-operator,realloc,C++,New Operator,Realloc,可能重复: 我知道,如果内存已通过 MalCube()/或 CALLUNE()/分配,C++数组可以重新分配(扩展)使用 RealCube()。我的问题是,我如何扩展C++中的数组,其内存已通过新< /COD>运算符分配?P> < P> >不能,这就是C++中使用 STD::vector < /C> >的原因。 如果要执行此操作,您必须分配一个新数组(通过new),然后跨(std::copy)复制旧项目,然后delete[]上一个数组 只需使用std::vector-让它为您完成所有这些工作…

可能重复:


我知道,如果内存已通过<代码> MalCube()/<代码>或<代码> CALLUNE()/<代码>分配,C++数组可以重新分配(扩展)使用<代码> RealCube()。我的问题是,我如何扩展C++中的数组,其内存已通过<代码>新< /COD>运算符分配?P> < P> >不能,这就是C++中使用<代码> STD::vector < /C> >的原因。

如果要执行此操作,您必须分配一个新数组(通过
new
),然后跨(
std::copy
)复制旧项目,然后
delete[]
上一个数组


只需使用
std::vector
-让它为您完成所有这些工作…

使用
::std::vector


查看或了解更多细节。即使在使用“代码> MalOC/”分配了内存时,一般C++数组中的

< P>不能重新分配,请使用<代码> RealCal。code>malloc不提供数组。它提供指向可用存储的指针。这里有一个微妙的区别

对于POD类型,可用存储和实际对象之间几乎没有区别。但对于非POD类型,可用存储和对象是完全不同的


realloc
为您提供了更大的可用存储空间。它操纵的是存储,而不是对象。这对于POD类型可能很好,但是对于其他类型来说,这是灾难的一个秘诀。

MalC/CyrOLC是C库调用——虽然它们可以在C++中使用,但一般来说应该避免,因为C++有更强大的处理动态数组的方法。因此,技术上可以使用<代码> RealCube()来扩展数组。使用
calloc()
分配的,或者只有通过
malloc()
分配内存时才可能使用
realloc()
?@amalantony哦,
calloc
也是如此。问题在于
realloc
本身。它不关心对象,只关心存储。@amal:malloc和calloc之间的区别与Martinho在这里所说的完全无关。你不能
realloc
非POD对象,因为你不能一个字节一个字节地复制它们,这就是
realloc
定义要做的。即使在C语言中,如果对象包含指向自身或彼此的指针,则不能
realloc
它们,因为地址不再正确。C++只是为非POD类添加了警告,实现可能会自行插入类似的东西。“然后复制旧的项目”或移动它们。