Привествую форум.
Есть примерно следующая конструкция:
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 >>