新的和重新分配内存

时间:2013-12-03 16:41:17

标签: c++ memory new-operator realloc

new[]不支持更改已分配内存的大小,是吗?

例如,我为缓冲区(char数组)分配了带new[]的内存,我想获得额外的内存。

在这种情况下我应该使用malloc / realloc吗?

5 个答案:

答案 0 :(得分:4)

new不支持。

您可以使用reallocnewdelete手动模仿memcpy的行为。

顺便说一下,您应该始终使用相同的方法系列,即malloc / realloc / freenew / delete,而不是将reallocnew / delete混合。例如,请参阅FMM errors reported by Purify

答案 1 :(得分:2)

您最接近标准C ++但不使用C暂停mallocrealloc就是使用std::vector<char>。这可以随时调整大小,如果重新分配底层存储,则会自动复制内容。

答案 2 :(得分:1)

使用std::vector。你不必处理这些问题。

答案 3 :(得分:1)

将malloc / realloc与new配合使用并不是一个好主意。

new将不支持在应用后重新分配更多内存。

所以一个好主意是创建一个带有额外内存的新缓冲区,memcpy并删除旧缓冲区。 然后指向这个新缓冲区。

答案 4 :(得分:0)

您应该使用std::vector代替。它可以调整大小。