циклится mapка
От: Аноним  
Дата: 04.09.07 07:16
Оценка:
Есть реализая делагатов(была здесь когда то опубликована, подточенная под свои нужды)

В ней есть цикл


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 зацикливается...если по идее не должен выполнятся не разу
Re: циклится mapка
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 04.09.07 07:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос: почему при размере мапки = 0, for зацикливается...если по идее не должен выполнятся не разу


Какой компилятор и какая STL?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: циклится mapка
От: Аноним  
Дата: 04.09.07 07:38
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Здравствуйте, Аноним, Вы писали:


А>>Вопрос: почему при размере мапки = 0, for зацикливается...если по идее не должен выполнятся не разу


КД>Какой компилятор и какая STL?


Спасибо, вопрос уже решен.. Ползанием по callstack нашлось место которое ухитрялось портить мапку и делать итераторы не валидными..
Re[3]: циклится mapка
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 04.09.07 07:47
Оценка:
Здравствуйте, Аноним, Вы писали:

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 нашлось место которое ухитрялось портить мапку и делать итераторы не валидными..


Гы. Ну дык реальные пацаны
  1. обходят копию списка связей с подписчиками
  2. учитывают, что во время рассылки подписчики могут отключаться.

Во втором случае нужно учитывать случай отключения тех подписчиков, до которых еще не дошла очередь.

Мда.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.