У меня есть класс "DMRecSessionObj", чьи объекты динамически распределяются с использованием новых и сохраняются в карте.
static std::map<string,DMRecSessionObj*> mapExpSessData;
DMRecSessionObj* dmRecSessObj = new DMRecSessionObj(atoi(p_callNum),atoi(p_totCalls), sessionKey);
mapExpSessData.insert(std::pair<string,DMRecSessionObj*>(sessionKey,dmRecSessObj));
Во время освобождения памяти я использую очевидный ниже метод
delete dmRecSessObj;
dmRecSessObj = NULL; //to prevent it from being a dangling pointer
Но я немного растерялся, пытаясь освободить память с помощью итератора, как показано ниже:
std::map<std::string,DMRecSessionObj*>::iterator itr_del = mapExpSessData.find(tmp_sessionId);
if (itr_del != mapExpSessData.end()){
mapExpSessData.erase(tmp_sessionId);
delete itr_del->second;
}
В этом случае должен ли итератор itr_del каким-либо образом быть установлен в NULL? Так как обычные указатели могут привести к зависанию указателей, если они не установлены в NULL, как поведет себя итератор в этом случае? Что еще нужно сделать в этом случае, чтобы быть в безопасности? Пожалуйста, предложите.
Спасибо.