new[]
不支持更改已分配内存的大小,是吗?
例如,我为缓冲区(char数组)分配了带new[]
的内存,我想获得额外的内存。
在这种情况下我应该使用malloc
/ realloc
吗?
答案 0 :(得分:4)
new
不支持。
您可以使用realloc
,new
和delete
手动模仿memcpy
的行为。
顺便说一下,您应该始终使用相同的方法系列,即malloc
/ realloc
/ free
或new
/ delete
,而不是将realloc
与new
/ delete
混合。例如,请参阅FMM errors reported by Purify。
答案 1 :(得分:2)
您最接近标准C ++但不使用C暂停malloc
和realloc
就是使用std::vector<char>
。这可以随时调整大小,如果重新分配底层存储,则会自动复制内容。
答案 2 :(得分:1)
使用std::vector
。你不必处理这些问题。
答案 3 :(得分:1)
将malloc / realloc与new配合使用并不是一个好主意。
new将不支持在应用后重新分配更多内存。
所以一个好主意是创建一个带有额外内存的新缓冲区,memcpy并删除旧缓冲区。 然后指向这个新缓冲区。
答案 4 :(得分:0)
您应该使用std::vector代替。它可以调整大小。