我想知道如何在一对向量中取消分配对象的内存。
vector< pair<int, object*> > vectorObject;
我确实尝试使用迭代器来遍历所有元素,但我不确定如何删除一对内的对象。
for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
// delete?
}
希望有好心人给点建议!
我想知道如何在一对向量中取消分配对象的内存。
vector< pair<int, object*> > vectorObject;
我确实尝试使用迭代器来遍历所有元素,但我不确定如何删除一对内的对象。
for (vector< pair<int, object*> >::iterator it = vectorObject.begin(); it != vectorObject.end(); ++it) {
// delete?
}
希望有好心人给点建议!
`直接的答案是:
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)而不是异常安全。
做就是了:
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 ¤t = *it;
delete current.second;
}
您还可以在 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 中的对象所有权。