Ist ein Iterator in c ++ nicht eine Art Zeiger?

Ok dieses Mal habe ich beschlossen, eine Liste mit der STL zu machen. Ich muss einen dedizierten TCP-Socket für jeden Client erstellen. Jedes Mal, wenn ich eine Verbindung habe, instanziiere ich einen Socket und füge einen Zeiger auf eine Liste hinzu.

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.

Es war einfach, einen neuen Zeiger auf einen Socket zu setzen, aber jetzt sollte ich jedes Mal, wenn die Verbindung beendet wird, den Socket trennen und den Zeiger löschen, damit kein riesiger Speicherverlust auftritt, oder? Nun, ich dachte, es geht mir gut, indem ich dies einstellte:

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;
    }
}

Aber der Compiler sagt dies:

 error: invalid cast from type ‘std::_List_iterator<MyTcp*>’ to type ‘MyTcp*’

Kann mir hier jemand helfen? Ich dachte, ich mache die Dinge richtig, ist ein Iterator zu einem bestimmten Zeitpunkt nicht nur ein Hinweis auf eines der Elemente der Menge? wie kann ich es reparieren

Antworten auf die Frage(4)

Ihre Antwort auf die Frage