Изменение list в цикле
От: Димчанский Литва http://dimchansky.github.io/
Дата: 30.06.04 09:10
Оценка:
Привествую форум.

Есть примерно следующая конструкция:
  TA* a;
  list<TA*>::iterator it = m_list.begin();
    while(it!=m_list.end())
    {
      a = *it++;
        a->Notify(); // здесь может произойти изменение m_list
    }

Кто-то наверное узнал в этом частичную (скорее всего баговую) реализацию publisher-subscriber.
Словом, вопрос такой: есть ли тут грабли?
Конкретно: если во время Notify произойдет удаление из списка текущего элемента? предыдущих? следующих?
iterator-то попортится, IMHO...
Поможет ли такое исправление:
  TA* a;
  list<TA*>::iterator it = m_list.begin();
    while(it!=m_list.end())
    {
      a = *it;
        a->Notify(); // здесь может произойти изменение m_list
        it++;
    }

?
... << Rsdn@Home 1.1.4 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.