关于在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还具有函数shrink_to_fit,您可以在调用clear()之后调用该函数,并且从理论上讲它将缩小容量以适合大小(现在为0)。但是,这是一个非绑定(bind)请求,您的实现可以随意忽略它。

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

10-11 18:16