std::list<Reader> readers;
readers.push_back(Reader());
Reader& r = *(readers.begin());
/* at this point, the exact place in list, where the reader was picked out, is forgotten.
Only 'r' shows which element of the list it is. */
readers.erase(r); //<---how to do this?
Clients erhalten die neuen Instanzen 'Leser' Objekte von einem Manager/Dispatcher. Der Verwalter führt eine interne Liste von allem, was gesendet wurde, und macht eine zwischengespeicherte Daten ungültig/frei, wenn "alle Interessierten" sie durch Beobachten des versendeten Leserspools abholen.Element aus Std entfernen :: list by reference
Wenn der Client nicht mehr an den Daten interessiert ist, sollte er den Leser zum Entfernen aus dem Pool an den Manager zurückgeben. Aber ich möchte nicht, dass der Kunde einen Iterator behält - er ist absolut nicht am Mut des Managers und des Pools der Leser interessiert; braucht nur diesen einen eigenen Reader, nicht einen Iterator, der darauf hinweist. Zum Löschen ruft er die Bereinigungsfunktion des Managers mit dem Verweis auf diesen einzelnen Leser auf.
Gibt es eine bessere Möglichkeit, diesen Reader von der Liste zu löschen, als die gesamte Liste auf der Suche nach dem einen Reader zu durchsuchen, zu dem der Verweis führt?
Sind t hese 'Readers' einzigartig (kein' Reader's haben den gleichen Wert)? – NathanOliver
@NathanOliver: Ja. Ein eindeutiger Leser pro Client, mit Methoden, um Daten aus dem Cache zu holen (und sie als "verbraucht von diesem" zu markieren), Manager macht Daten ungültig, wenn sie von allen Interessenten "aufgebraucht" sind. –
'readers.remove (r);' sollte funktionieren (wenn 'r' eindeutig ist), aber die Liste intern iterieren. –