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
std::vector::push_back() erwartet eine Referenz auf ein Objekt.
m_GnomeVector.push_back(CGnome(0.23f, true)); übergibt dem Vector eine Referenz auf ein Objekt (CGnome), das nur innerhalb des Funktionsaufrufs gültig ist. Nach dem Funktionsaufruf wird das anonyme Objekt, das du als Parameter übergeben hast gelöscht. Die Referenz im Vector zeigt nun auf ein ungültiges Objekt.
Du solltest deine Gnome besser mit Zeigern und new verwalten/erstellen.
Quellcode |
|
1 2 3 4 5 6 |
typedef std::vector<CGnome*> GnomeVector; ... m_GnomeVector.reserve(2); for(int i = 0; i < 2; i++) m_GnomeVector.push_back(new CGnome(0.23f, true)); |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
typedef std::vector<CGnome*> GnomeVector; GnomeVector m_GnomeVector; m_GnomeVector.reserve(10); for(int i = 0; i < 10; i++) m_GnomeVector.push_back(new CGnome(0.23f, true)); |
Ich dachte clear() würde den gesamten Speicher automatisch freigeben... Muss ich also vor clear noch einmal durch den vector iterieren und alle Objekte mit delete löschen?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
class foo { public: foo(); ~foo(); foo(const foo&); {pointer = new xyz; *pointer = *foo.pointer;} //copy-ctor (wenn privat deklariert, kann das Objekt nicht kopiert werden) //... xyz* pointer; //... }; |
Werbeanzeige