gpt4 book ai didi

C++ 删除 vector 、对象、释放内存

转载 作者:IT老高 更新时间:2023-10-28 13:58:45 52 4
gpt4 key购买 nike

对于删除 C++ 中的内容,我完全感到困惑。如果我声明一个对象数组并且如果我使用 clear() 成员函数。我可以确定内存被释放了吗?

例如:

tempObject obj1;
tempObject obj2;
vector<tempObject> tempVector;

tempVector.pushback(obj1);
tempVector.pushback(obj2);

我可以安全地调用 clear 来释放所有内存吗?还是我需要遍历才能一一删除?

tempVector.clear();

如果把这个场景改成对象的指针,答案会和上面一样吗?

vector<tempObject> *tempVector;
//push objects....
tempVector->clear();

最佳答案

您可以调用 clear,这将销毁所有对象,但不会释放内存。循环遍历各个元素也无济于事(您甚至建议对对象采取什么操作?)您可以做的是:

vector<tempObject>().swap(tempVector);

这将创建一个没有分配内存的空 vector 并将其与 tempVector 交换,从而有效地释放内存。

C++11 也有函数 shr​​ink_to_fit,你可以在调用 clear() 之后调用它,理论上它会缩小容量以适应大小(现在为 0)。然而,这是一个不具约束力的请求,您的实现可以随意忽略它。

关于C++ 删除 vector 、对象、释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464992/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com