C 删除向量、对象、释放内存

新手上路,请多包涵

关于删除 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 许可协议

阅读 492
2 个回答

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

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

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

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

原文由 Benjamin Lindley 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以通过这种方式释放向量使用的内存:

 //Removes all elements in vector
v.clear()

//Frees the memory which is not used by the vector
v.shrink_to_fit();

原文由 Bensuperpc 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题