Zeiger aus Map löschen
-
Abend!
Ich habe eine map<string, Context*> und will nur einen bestimmten Eintrag löschen:
map<std::string, Context*>::const_iterator it = mContexts.find(contextName); if(it != mInputContexts.end()) { delete it->second; mContexts.erase(it); }In dem Code lösche ich zuerst das Objekt und danach den Eintrag aus der Map. Frage: Ist das sicher? Denn wenn ich map::erase() aufrufe, ist das Ding ja bereits zerstört. Oder lieber anders machen?

-
Hey Marlooo,
Mit 'delete'/'delete[]' löscht du nichts, du gibst bloß Speicher frei.
Außerdem gibst du ja nicht den iterator frei sondern iterator->second.
Dein Iterator ist noch weiterhin in der Map referenziert.ERGO: Sicherer Code.
-
Du könntest dir auch überlegen dafür boost zu benutzen. Pointer Container machen genau so Sachen für dich:
http://www.boost.org/doc/libs/1_46_1/libs/ptr_container/doc/ptr_container.html