【发布时间】:2011-02-09 07:16:18
【问题描述】:
好吧,这次我决定使用 STL 制作一个列表。我需要为每个客户端创建一个专用的 TCP 套接字。所以每次我有一个连接时,我都会实例化一个套接字并在列表中添加一个指向它的指针。
list<MyTcp*> SocketList; //This is the list of pointers to sockets
list<MyTcp*>::iterator it; //An iterator to the list of pointers to TCP sockets.
将新指针放入套接字很容易,但是现在每次连接结束时,我都应该断开套接字并删除指针,这样我就不会出现巨大的内存泄漏,对吧?好吧..我认为通过设置这个我做得很好:
it=SocketList.begin();
while( it != SocketList.end() ){
if((*it)->getClientId() == id){
pSocket = it; // <-------------- compiler complains at this line
SocketList.remove(pSocket);
pSocket->Disconnect();
delete pSocket;
break;
}
}
但是编译器是这样说的:
error: invalid cast from type ‘std::_List_iterator<MyTcp*>’ to type ‘MyTcp*’
有人可以帮我吗?我以为我做对了,在任何给定时间迭代器不只是指向集合中的一个元素吗?我该如何解决?
【问题讨论】:
-
迭代器指向容器中的一个元素,所以你需要使用 * 操作符取消引用它。
-
更容易将指针视为一种随机访问迭代器...将所有 RAM 视为一个大向量。
标签: c++ list pointers iterator