Есть реализая делагатов(была здесь когда то опубликована, подточенная под свои нужды)
В ней есть цикл
std::map<IDelegate*,SUBSCRIBE_RULES>::const_iterator it;
for(it = m_DelegateList.begin(); it != m_DelegateList.end(); it++)
{
if((*it).second==subs)
(*it).first->Invoke(lp1);
}
Вопрос: почему при размере мапки = 0, for зацикливается...если по идее не должен выполнятся не разу
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Аноним, Вы писали:
std::map<IDelegate*,SUBSCRIBE_RULES>::const_iterator it;
for(it = m_DelegateList.begin(); it != m_DelegateList.end(); it++)
{
if((*it).second==subs)
(*it).first->Invoke(lp1);
}
А>Спасибо, вопрос уже решен.. Ползанием по callstack нашлось место которое ухитрялось портить мапку и делать итераторы не валидными..
Гы. Ну дык реальные пацаны
обходят копию списка связей с подписчиками
учитывают, что во время рассылки подписчики могут отключаться.
Во втором случае нужно учитывать случай отключения тех подписчиков, до которых еще не дошла очередь.
Мда.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --