关于删除 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();
原文由 mister 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以调用 clear,这将销毁所有对象,但不会释放内存。循环遍历各个元素也无济于事(您甚至打算对对象采取什么行动?)您可以做的是:
这将创建一个没有分配内存的空向量并将其与 tempVector 交换,从而有效地释放内存。
C++11 还具有函数
shrink_to_fit
,您可以在调用 clear() 之后调用它,理论上它会缩小容量以适应大小(现在为 0)。然而,这是一个不具约束力的请求,您的实现可以随意忽略它。