2013-10-16 130 views
0

我想知道如何释放对象内存中的一对向量。释放对象内存中的对象

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

我曾尝试使用迭代通过所有的元素进行迭代,但我不确定如何删除的对象是一对里面。

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

希望有人会提供足够的建议!

+0

'delete it-> second;'? – juanchopanza

回答

2

'直答案是:

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

不过。你可能不应该这样做。
有unmanged指针是一个坏主意。您应该更改要使用的矢量的类型std::unique_ptr

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

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

+0

我目前没有使用C++ 11。是否没有其他更安全的方式来释放对象内存? – Todd

+0

或者,你可以使用boost :: shared_ptr。 –

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; 
} 
0

您还可以使用的范围为基础的C++ 11的循环:

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

而且因为我们已经在谈论C++ 11,你还不如改变你的容器:

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

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