在C语言中,我们可以简单地使用realloc()来增加/减少指针指向的内存大小。
在使用“ new”初始分配内存的情况下,C ++中是否存在等效的重新分配运算符/函数?
不,没有renew
电话:-)
而且,老实说,有了C ++提供的所有丰富的(和自动调整大小的)数据结构,几乎不需要它。例如,尽管可能需要调整C字符串的大小以添加更多文本,std::string
但您还是需要照顾好它。就像std::vector
其他数组一样,依此类推。
如果你真的想要去对过去二十多年的C ++的改进和做到这一点,你可以随时恢复到C的方式(因为malloc
,free
和realloc
可用),但我建议不这样做,如果你能避免它。
您也可以尝试实现一项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] 删除。
我来说两句