首页 > 解决方案 > 如何在不使用 realloc 的情况下使用 new 和 delete C++ 重新分配动态数组?

问题描述

所以在 C++ 中,我读到 Crealloc(&dest, &source, nbytes)不好,因为它不适用于 new 和 delete。

那么如何在 C++ 中正确地重新分配数据呢?假设我有:

int* a = new int[100];

但我希望将其调整为 int[200]。我想到的最简单的方法是:

int* old = a;
int* newPos = new int[200];
memcpy(newPos, a, sizeof(int)*100);
a = newPos;
delete[] old;

有没有更简单的方法?谢谢

标签: c++pointersnew-operatormemcpyrealloc

解决方案


你应该使用std::copy,而不是 memcpy:

std::copy(old, old+100, newPos);

但总的来说,您应该避免使用newanddelete直接使用标准容器(可能在您的情况下),当您调用它们的方法std::vector<int>时,它们会为您处理所有这些。resize


推荐阅读