【发布时间】:2015-04-01 23:51:39
【问题描述】:
我正在编写一个多线程 c++ WIN 套接字服务器,但遇到了一些奇怪的问题。
我正在使用向量来存储活动连接。我用 win mutex 锁定向量,然后尝试遍历它以找到所有关闭的连接并删除它们,然后释放 mutex。
代码:
if (!m_activeConnections.empty()){
for(std::vector<Connection*>::iterator it = m_activeConnections.begin(); it != m_activeConnections.end(); ++it) {
if ((*it)->isClosed()){
delete *it;
it = m_activeConnections.erase(it);
break;
}
}
cout << "\n \t Active Connections: " << m_activeConnections.size() << endl;
}
它的工作原理是这样的,但是当我删除 break 行时,它总是会再循环一次,迭代器 it 指向 0Xaaaaaa 并引发异常。如果此删除是在创建新连接的同一线程中完成的,即使没有中断,它也可以正常工作。这是为什么呢?
【问题讨论】:
标签: c++ vector iterator iteration