在C ++中替代realloc()?

加里·艾伦

在C语言中,我们可以简单地使用realloc()来增加/减少指针指向的内存大小。

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

紫罗兰色

不,没有renew电话:-)

而且,老实说,有了C ++提供的所有丰富的(和自动调整大小的)数据结构,几乎不需要它。例如,尽管可能需要调整C字符串的大小以添加更多文本,std::string但您还是需要照顾好它。就像std::vector其他数组一样,依此类推。

如果你真的想要去对过去二十多年的C ++的改进和做到这一点,你可以随时恢复到C的方式(因为mallocfreerealloc可用),但我建议不这样做,如果你能避免它。

您也可以尝试实现一项renew功能,但是由于您将无法访问内部内存分配数据(因此realloc),因此它将变得更加困难这意味着每个操作 renew都可能是“分配和复制”操作。

而且,如果您提供一个可以您提供该信息的类,那么您已经进入了“比字节数组稍微复杂一点”的领域,因此很可能会加紧让该类自己完成重新分配的工作。


顺便说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");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C中的realloc问题

来自分类Dev

我自己的realloc函数在c中的实现

来自分类Dev

C ++中bwdist的替代功能

来自分类Dev

C#中的指针替代

来自分类Dev

Bwdist在C ++中的替代功能

来自分类Dev

替代C ++中的引用数组?

来自分类Dev

替代 C 中的函数重载?

来自分类Dev

C / C ++中的评估和替代

来自分类Dev

C中的动态内存分配:Realloc中的问题

来自分类Dev

Valgrind在C中无效的free()/ delete / delete [] / realloc()

来自分类Dev

什么时候realloc()等效于C中的malloc()?

来自分类Dev

为什么在C中malloc()成功的地方realloc()失败?

来自分类Dev

释放C中malloc()和realloc()分配的所有内存

来自分类Dev

realloc()或free()或double free或腐败中的C问题

来自分类Dev

使用malloc()或realloc()存储并在C中打印数据

来自分类Dev

在C中对大型数组使用realloc的分段错误

来自分类Dev

什么时候realloc()等效于C中的malloc()?

来自分类Dev

Valgrind在C中无效的free()/ delete / delete [] / realloc()

来自分类Dev

ANSI C中的可变参数宏替代

来自分类Dev

替代C#中的枚举-嵌套

来自分类Dev

C#中是否可以替代Constant?

来自分类Dev

C ++中模板类的替代品?

来自分类Dev

C ++中基于范围的for循环的替代方法

来自分类Dev

c#/ LINQ .Java中的选择(替代)

来自分类Dev

TypeScript / Javascript中的C#SelectMany替代

来自分类Dev

替代C#中的枚举-嵌套

来自分类Dev

在C ++ / CX中是否可以替代C#?赢10

来自分类Dev

C#嵌套字典中插入中的替代值

来自分类Dev

像 C# 中 SQL 替代中的运算符