Что происходит, если ключ std :: map указывает на объект, который изменяется? - PullRequest
0 голосов
/ 05 февраля 2019

Вот фрагмент кода, все методы защищены мьютексом, который по причинам простоты я здесь скрыл.

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 - это объект, который можно изменить извне.Что будет в этом случае?Будет ли карта снова отсортирована?Это потерпит крах?Или что-то еще?

...