Fifo mit Deque -> Element löschen
-
Hallo erstmal
Habe einen FIFO Speicher mittels einer Deque realisiert. Das funktioniert ganz nett, aber mein Speicher läuft voll.
std::deque<foo*> fifofu; for( int i = 0; i < 100; i++ ) { foo* elem = new foo(); fifofu.push_back( elem ); DoSomethingWithFoos(); // Hier muss ich das erste Element mit delete löschen, aber wie? fifofu.pop.front(); }Wie kann ich das erste Element löschen? Bräuchte nur einen Zeiger drauf, um delete auszuführen. Wie kann ich den bekommen?
Wird der "elem" Zeiger (nicht das Objekt) nach verlassen der Schlaufe zerstört?danke im vorraus
-
Ach ich depp..
manchmal seh ich den Wald vor lauter Pfeilen nichtstd::deque<foo*> fifofu; for( int i = 0; i < 100; i++ ) { foo* elem = new foo(); fifofu.push_back( elem ); DoSomethingWithFoos(); delete *fifofu.begin(); fifofu.pop.front(); }
-
Übrigens heißt die Methode nicht "pop.front()", sondern "pop_front()" (beachte den Unterstrich).
-
...ich hasse unterstriche
-
Gewöhn dich lieber dran, in der STL kommen die öfter vor

-
War nur ein Tipp Fehler. Im Programm is es richtig.
Aber sonst mal ne Frage, macht das Ding so sinn?
Soll mal ne Art Konsolen Output werden.
Also Foo* werden mal Strings sein.
-
Ja, Sinn könnte es machen, aber ich würde vermutlich auf das Zeiger-Gebastel verzichten und stattdessen mit blanken foo-Objekten arbeiten.
(wenn du unbedingt Zeiger verwenden willst: Boost::shared_ptr sind da praktischer ;))
-
Hmm, die ganzen Objekte sind nicht einfache Strings.
Das sind Schrift-Objekte einer eignen Klasse, mit Variablen für Position und Grösse, einem String, und noch Methoden. Die Dequeu wird dann in jedem Renderframe durchgegangen, und bei neuen Zeilen werden alle Y-Positionen verschoben. (LineFeed)
Weiss nicht ob das noch einigermassen günstig geht. Hat jetzt schon 47'000kB mit 46 Zeilen, FPS ist aber noch ok.
-
Auch größere Objekte können als Wert gespeichert werden

(und ein Smart-Pointer ist auf jeden Fall günstiger als ein nackter Pointer - vor allem brauchst du dich dann nicht mehr darum zu kümmern, wie der delete-Aufruf korrekterweise lauten sollte ;))
-
Ich dachte ich hätt hier mal gelesen, dass Zeigerübergabe besser ist, als grössere Objekte zu kopieren. Grade bei den Vectoren wird ja oft das ganze Geklumps in nen neuen Bereich kopiert.
Naja werds mal testen.