在一对向量内释放对象的内存

时间:2013-10-16 15:18:20

标签: c++ iterator delete-operator std-pair

我想知道如何在一对向量内取消分配对象的内存。

vector< pair<int, object*> > vectorObject;

我确实尝试使用迭代器迭代所有元素,但我不确定如何删除对中的对象。

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
    // delete?
}

希望有人能够提出建议!

3 个答案:

答案 0 :(得分:2)

`直接的答案是:

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
    delete it->second;
}

但是。你可能不应该这样做。
拥有无限指针是一个不好的想法。您应该更改矢量的类型以使用std::unique_ptr

vector< pair<int, std::unique_ptr<object>>>  vectorObject;

这是因为手动删除对象是容易出错的,除非你采取保护措施(通过uisng RAII)非例外安全

答案 1 :(得分:0)

只是做:

for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
    delete it->second;
}

或取消引用迭代器并删除第二个:

typedef pair<int, object*> mypair;

for (vector< mypair >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
    mypair &current = *it;
    delete current.second;
}

答案 2 :(得分:0)

您还可以在C ++ 11中使用基于范围的for循环:

for (const auto& pair : vectorObject)
    delete pair.second;

既然我们已经在谈论C ++ 11了,你也可以将容器更改为:

std::vector<std::pair<int, std::unique_ptr<object>>> vectorObject;

总是更喜欢智能指针来处理C ++ 11中的对象所有权。