我收到以下错误代码:
for(std::vector<AguiTimedEvent*>::iterator it = timedEvents.begin();
it != timedEvents.end();)
{
if((*it)->expired())
{
(*it)->timedEventCallback();
delete (*it);
it = timedEvents.erase(it);
}
else
it++;
}
可能是什么问题呢?
定时事件有时会在调用其回调时插入一个新事件,这可能会做到这一点
谢谢
最佳答案
如果遍历 vector ,并且回调函数导致将 vector 添加到 vector ,则进入 vector 的所有迭代器可能都无效,包括循环变量it
。
在这种情况下(回调会修改 vector ),最好使用索引作为循环变量。
您可能需要对设计进行一些彻底的分析,以确保不会创建任何意外的无限循环。
例如。
for(std::vector<AguiTimedEvent*>::size_type n = 0;
n < timedEvents.size();)
{
if(timedEvents[n]->expired())
{
timedEvents[n]->timedEventCallback();
delete timedEvents[n];
timedEvents.erase(timedEvents.begin() + n);
}
else
n++;
}
关于c++ - vector 迭代器不可取消?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4504883/