我有一个
map<char,my_class*> mymap;
Run Code Online (Sandbox Code Playgroud)
其内容如下.
mymap[0]=('a', 0x1);
mymap[1]=('b',0x2);
mymap[3]=('c',0x3);
mymap[4]=('d',0x1);
Run Code Online (Sandbox Code Playgroud)
如您所见,我们对键'a'和'd'具有相同的值.我有一个for循环来删除地图中的指针.
for ( it=mymap.begin() ; it != mymap.end(); it++ ){
delete it->second;
}
Run Code Online (Sandbox Code Playgroud)
它崩溃是因为它试图删除0x1两次.我试过这样做
for ( it=mymap.begin() ; it != mymap.end(); it++ ){
if(!it->second){
delete it->second;
it->second = NULL;
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也会尝试将指针设置为NULL两次,这会导致异常.在地图中删除上述重复值的最佳方法是什么?
NPE的答案shared_ptr很好.但是如果你被迫使用真正的指针,我可能会这样做:
set<my_class*> values;
for (it=mymap.begin(); it != mymap.end(); it++)
{
// insert.second will be false if the value is already in the set
if (values.insert(it->second).second)
delete it->second;
}
// Make sure you do something with mymap to ensure you don't double-delete later!
Run Code Online (Sandbox Code Playgroud)