详见代码:
std::map<uint32, CTmpFightState>::iterator iterTmp = m_mapTmpFightState.begin();
for (; iterTmp != m_mapTmpFightState.end();) {
if (CDateTime::current() > iterTmp->second.m_nBeginTime + MIN(1)) {
iterTmp = m_mapTmpFightState.erase(iterTmp); // windows下成立,linux下不成立
} else {
iterTmp++;
}
}正确写法:
std::map<uint32, CTmpFightState>::iterator iterTmp = m_mapTmpFightState.begin();
for (; iterTmp != m_mapTmpFightState.end();) {
if (CDateTime::current() > iterTmp->second.m_nBeginTime + MIN(1)) {
m_mapTmpFightState.erase(iterTmp++);
} else {
iterTmp++;
}
}
本文讨论了在C++编程中使用std::map迭代器时的一个常见问题,即在某些环境下,直接使用erase操作可能导致异常。提供了一个正确的实现方式,以确保在不同操作系统上都能正常运行。

3085

被折叠的 条评论
为什么被折叠?



