Ok, esta vez decidí hacer una lista usando el STL. Necesito crear un socket TCP dedicado para cada cliente. Así que cada vez que tengo una conexión, instauro un socket y agrego un puntero a él en una lista.¿No es un iterador en C++ una especie de puntero?
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.
Poner un nuevo puntero a una toma de corriente fue fácil, pero ahora cada vez que termina la conexión que debería desconectar el enchufe y eliminar el puntero de modo que no se deje una enorme pérdida de memoria, ¿verdad? así .. Yo pensaba que estaba haciendo bien mediante el establecimiento de esto:
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;
}
}
Pero el compilador está diciendo esto:
error: invalid cast from type ‘std::_List_iterator<MyTcp*>’ to type ‘MyTcp*’
¿Puede alguien ayudarme aquí? pensé que estaba haciendo las cosas bien, ¿no es un iterador en un momento dado simplemente señalando uno de los elementos del conjunto? ¿Cómo puedo arreglarlo?
El iterador _puntos_ a un elemento en el contenedor, por lo que debe desreferenciarlo usando el operador *. – jweyrich
Es más fácil pensar en un puntero como en un tipo de iterador de acceso aleatorio ... uno que ve toda la RAM como un gran vector. –