Вот фрагмент кода, все методы защищены мьютексом, который по причинам простоты я здесь скрыл.
struct sourceIdCmp { //function for comparison
bool operator() (const SourceId* s1, const SourceId* s2) const {
return *s1 < *s2;
}
};
typedef std::map<const SourceId*, someNewObject*, sourceIdCmp> StatusInfoMap;
static StatusInfoMap s_statusInfos;
void StatusInfo::removeStatusInfo(const SourceId* sid)
{
StatusInfoMap::iterator it = s_statusInfos.find(sid);
if(it != s_statusInfos.end())
{
delete it->second; //someNewObject
s_statusInfos.erase(it); //erase StatusInfoMap entry
}
}
void StatusInfo::addStatusInfo(const SourceId * sid)
{
StatusInfoMap::iterator it = s_statusInfos.find(sid);
if (it == s_statusInfos.end())
{
s_statusInfos[sid] = someValueObject();
}
}
sid - это объект, который можно изменить извне.Что будет в этом случае?Будет ли карта снова отсортирована?Это потерпит крах?Или что-то еще?