【问题标题】:How to reallocate dyanmic array when using new and delete C++ without using realloc? [duplicate]使用new和delete C++而不使用realloc时如何分配动态数组? [复制]
【发布时间】:2019-12-14 06:48:30
【问题描述】:

所以在 C++ 中,我读到 C realloc(&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++ containers,可能是std::vector,在你的情况下是std::vector<int>
  • 是的,我知道在这种情况下容器是正确的。但具体来说,无论如何要在 C++ 中重新分配?
  • 这能回答你的问题吗? Reallocating memory of a C++ array.
  • 编译器通常知道标准容器。顺便说一句,即使在 C 中,realloc 也经常被错误地使用(例如,对于失败的情况)。所以请使用容器,或者放弃C++

标签: c++ pointers new-operator memcpy realloc


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-17
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2015-04-11
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多