在我们使用的C中malloc(), free(),但是在C++中你使用new, delete,但在C中我们也有realloc,它将分配新块并复制旧数据(常见的最小值),然后释放旧数据块.那么那个C++版本是什么?我当然可以写自己的,但是有内置的东西吗?
main() {
int i; char *x = malloc(3);
x[0] = 10;
x[1] = 20;
x[2] = 30;
realloc(x, 4);
x[3] = 40;
for (i = 0; i < 4; i++) printf("%i\n", x[i]);
}
Run Code Online (Sandbox Code Playgroud)
zak*_*ter 31
在C++中没有new/ delete等价realloc.
为什么C++没有与realloc()相同的东西?
如果你愿意,你当然可以使用realloc().但是,realloc()仅保证对包含没有用户定义的副本构造函数的对象的malloc()(和类似函数)分配的数组起作用.此外,请记住,与天真的期望相反,realloc()偶尔会复制其参数数组.在C++中,处理重新分配的更好方法是使用标准库容器,例如vector,并让它自然增长.
如果你想要一个可调整大小的容器,只需使用std::vector,否则留下来malloc,realloc和free.
并且,为了回答您的上一个问题,您的代码的C++版本将是:
main() {
std::vector<char> x(3);
x[0] = 10;
x[1] = 20;
x[2] = 30;
x.resize(4);
x[3] = 40;
for (int i = 0; i < 4; i++) std::cout << x[i] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
mas*_*oud 22
让我们看看Bjarne Stroustrup的想法!
如果你愿意,你当然可以使用realloc().但是,realloc()仅保证对包含没有用户定义的副本构造函数的对象的malloc()(和类似函数)分配的数组起作用.此外,请记住,与天真的期望相反,realloc()偶尔会复制其参数数组.
在C++中,处理重新分配的更好方法是使用标准库容器,例如vector,并让它自然增长.