Ok questa volta ho deciso di creare un elenco utilizzando l'STL. Devo creare un socket TCP dedicato per ogni client. Quindi ogni volta che ho una connessione, istanzio un socket e aggiungo un puntatore ad esso su una lista.Non è un Iterator in C++ una specie di puntatore?
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.
Mettere un nuovo puntatore ad una presa di corrente è stato facile, ma ora ogni volta che la connessione viene terminata dovrei scollegare la presa ed eliminare il puntatore in modo che non si ottiene un enorme perdita di memoria, giusto? bene .. Ho pensato che stavo facendo bene impostando questo:
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;
}
}
Ma il compilatore dice questo:
error: invalid cast from type ‘std::_List_iterator<MyTcp*>’ to type ‘MyTcp*’
Qualcuno mi può aiutare qui? Pensavo che stavo facendo le cose per bene, non è un iteratore in un dato momento semplicemente indicando uno degli elementi del set? come posso ripararlo?
L'iteratore _punti_ in un elemento nel contenitore, quindi è necessario dereferenziarlo utilizzando l'operatore *. – jweyrich
È più facile pensare a un puntatore come a una sorta di iteratore ad accesso casuale ... uno che vede tutta la RAM come un grande vettore. –