替代 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 方式(因为 malloc
、free
和 realloc
可用),但如果可以避免,我建议不要这样做。
您也可以尝试实现 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");
}
在 C 中,我们可以简单地使用 realloc() 来 increase/decrease 指针指向的内存大小。
在使用“new”初始分配内存的情况下,C++ 中是否存在等效的重新分配operator/function?
没有,没有 renew
电话:-)
而且,老实说,C++ 提供了所有丰富的(和 auto-sizing)数据结构,几乎不需要它。例如,虽然可能需要调整 C 字符串的大小以添加更多文本,但 std::string
会为您处理。 std::vector
对其他数组也是如此,依此类推。
如果您真的想要反对 C++ 过去 20 年的改进并这样做,您总是可以恢复 C 方式(因为 malloc
、free
和 realloc
可用),但如果可以避免,我建议不要这样做。
您也可以尝试实现 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");
}