Как не надо делать:
1 2 3 4 5 6 7 8 |
for (list<Item>::iterator it=Items.begin(); it != Items.end(); it++) { if (it->time.GetInt64() <= curTime) { it->syncObj.SetValue(_SC("waiting"), false); it = Items.erase(it); } } |
Если после удаления записи, it = Items.end(), и применить ещё инкремент — получим ассерт.
Как надо делать:
1 2 3 4 5 6 7 8 9 10 |
for (list<Item>::iterator it=Items.begin(); it != Items.end(); /*none (safe)*/) { if (it->time.GetInt64() <= curTime) { it->syncObj.SetValue(_SC("waiting"), false); it = Items.erase(it); continue; //after erase } it++; } |