我知道如果通过realloc()
或malloc()
分配了内存,则可以使用calloc()
重新分配(扩展)C ++数组。我的问题是,如何在C ++中扩展其内存已通过new
运算符分配的数组?
答案 0 :(得分:11)
你不能 - 这就是为什么在C ++中你使用std::vector<>
。
如果你想这样做,你必须分配一个新数组(通过new
),然后复制旧项目(例如std::copy
),然后delete[]
上一个数组。
只需使用std::vector
- 让它为你做所有的事情......
答案 1 :(得分:5)
通常,即使存储分配了realloc
,也无法使用malloc
重新分配C ++数组。 malloc
没有给你数组。它提供了可用存储的指针。这里有一个微妙的区别。
对于POD类型,可用存储和实际对象之间几乎没有区别。但对于非POD类型,可用的存储和对象是完全不同的东西。
realloc
为您提供了更大比例的可用存储空间。它操纵存储而非对象。这可能适用于POD类型,但对于其他类型,这是一个灾难的处方。
答案 2 :(得分:0)
使用::std::vector
。
请查看this question或this question了解详情。