c++ - How to properly delete a map of pointers as key? -


i have map of key/value pointers :

std::map<a*, b*> mymap; 

what proper way liberate memory of key only?

i thinking doing :

for (auto itr = _mymap.begin(); itr != _mymap.end(); itr++) {     if (certaincondition == true)     {         delete itr->first;         itr->first = nullptr;     } } 

is correct way of doing it? map keep nullptr key , future iteration include nullptr?

you cannot modify key of container because used define ordering , changing in place invalidate ordering. furthermore, each key needs unique. therefore, need remove item map clean memory.

if have key:

mymap.erase(key); delete key; 

if have iterator within map:

a* keycopy = itr->first; mymap.erase(itr); delete keycopy; 

edit

per updated question:

auto itr = mymap.begin(); while (itr != mymap.end()) {     if (certaincondition == true)     {         a* keycopy = itr->first;         itr = mymap.erase(itr);         delete keycopy;     }     else     {         ++itr;     } } 

Comments

Popular posts from this blog

javascript - Using jquery append to add option values into a select element not working -

Android soft keyboard reverts to default keyboard on orientation change -

Rendering JButton to get the JCheckBox behavior in a JTable by using images does not update my table -