替代 C++ 中的 realloc()?

Alternative to realloc() in C++?

在 C 中,我们可以简单地使用 realloc() 来 increase/decrease 指针指向的内存大小。

在使用“new”初始分配内存的情况下,C++ 中是否存在等效的重新分配operator/function?

没有,没有 renew 电话:-)

而且,老实说,C++ 提供了所有丰富的(和 auto-sizing)数据结构,几乎不需要它。例如,虽然可能需要调整 C 字符串的大小以添加更多文本,但 std::string 会为您处理。 std::vector 对其他数组也是如此,依此类推。

如果您真的想要反对 C++ 过去 20 年的改进并这样做,您总是可以恢复 C 方式(因为 mallocfreerealloc 可用),但如果可以避免,我建议不要这样做。

您也可以尝试实现 renew 功能,但它会稍微困难一些,因为您无法访问内部内存分配数据(如 realloc 那样)。这意味着 every renew 可能会是一个“分配和复制”操作。

并且,如果您提供的 class 可以 为您提供 该信息,那么您已经进入了“比字节数组稍微复杂一点”的领域,所以可能只是让 class 自己完成重新分配的繁重工作。


顺便说一句,我从来没有真正喜欢过 realloc,因为如果失败,您通常会在内存泄漏中丢失旧指针。这意味着我总是不得不做这样的事情:

int betterReAlloc(void **pOldPtr, size_t newSz) {
    void *newptr = realloc(*pOldPtr, newSz);
    if (newPtr != NULL) *pOldPtr = newPtr)
    return newptr != NULL;
}

char *ptr = somethingValidlyMalloced();
if (! betterReAlloc(&ptr, BETTER_SIZE)) {
    puts("Cannot realloc, using original");
}