Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Hm, wieso nicht gleich ein temporäres Objekt einfügen? Das wird eher wegoptimierbar sein.Zitat von »"n0_0ne"«
Diese werden aber beispielsweise einfach mit CObject Asteroid; erzeugt, und dann per push_back in die Liste gelegt.
C-/C++-Quelltext |
|
1 |
MyList.push_back(MyClass(24, 21)); // temporäres Objekt erzeugen und einfügen |
Wie alle Variablen mit statischem Speicherbereich (Stack) beim Verlassen des Gültigkeitsbereichs.Zitat von »"n0_0ne"«
Da ich die "Mechanik" von C++ noch nicht ganz durchschaut habe, frage ich mich auch gerade, wann dann das Original, von der die Kopie erzeugt wurde, wieder gelöscht wird.
Die Liste erzeugt eine Kopie davon auf dem Heap. Aber wie gesagt wird ein moderner Compiler die Kopie wahrscheinlich wegoptimieren können. Falls du jedoch wirklich Probleme mit der Performance hast, liegen die mit grösster Wahrscheinlichkeit woanders. Also mach dir darüber erst Gedanken, nachdem du nachgewiesen hast, dass das Kopieren beim Einfügen dein Flaschenhals ist.Zitat von »"n0_0ne"«
Außerdem wäre es nicht um einiges performanter, wenn man ein solches Object auf dem Heap erzeugt, und dann nur einen Zeiger in der Liste speichert?
Sehr oft verwendet man Referenzen bei Parameterübergaben. const-qualifiziert, wenn man ein Objekt übergeben will, das nicht kopiert werden soll; normal, wenn man ein Objekt innerhalb einer Funktion verändern möchte. Sonst braucht man Referenzen oft als Aliase/Verweise auf Variablen. Sie sind ähnlich zu Zeigern, jedoch müssen sie bei der Initialisierung auf ein gültiges Objekt zeigen, ihr Ziel kann nicht geändert werden und die Dereferenzierungssyntax entfällt.Zitat von »"n0_0ne"«
Und wann setzt man eigentlich noch mal Referenzen ein?
Alter Hase
Alter Hase
Zitat von »"the[V«
oid"]Ähm....steh ich grade auf dem Schlauch? Ich war immer der Meinung, dass in den STL-Containern ausschließlich Referenzen gespeichert werden können. Zum Beispiel nimmt ja die push_back-Funktion von std::queue einen Parameter von Typ const T& entgegen. Das heißt, was wir auch für T festlegen, es werden immer nur Referenzen aufgenommen. Deshalb macht auch eine std::list<CObject&> gar keinen Sinn.
Werbeanzeige