Kopiert std::vector Objekte beim Anhängen mit push_back?
Nach sorgfältiger Untersuchung mit Valgrind sind einige Benutzer zu dem Schluss gekommen, dass std ::vector erstellt mithilfe der Methode push_back() Kopien von Objekten, die in den Container verschoben werden. Dies hat Fragen zur Fähigkeit des Vektors aufgeworfen, Referenzen oder Zeiger zu speichern, ohne Kopien zu erstellen.
std::vector-Verhalten
Die Annahme ist richtig. Wenn ein Objekt push_back() in einen std::vector verschoben wird, wird eine Kopie dieses Objekts erstellt und im Vektor gespeichert. Dies liegt daran, dass std::vector intern ein Array von Objekten vom Typ T verwaltet und alle Änderungen an den Elementen des Vektors im Vektor selbst widergespiegelt werden müssen.
Alternativen zum Speichern von Referenzen oder Zeiger
Wenn Sie Referenzen oder Zeiger auf Objekte in Ihrem Vektor speichern möchten, besteht die Lösung darin, ein std::vector zu verwenden. anstelle von std::vector. Dadurch können Sie Referenzen oder Zeiger direkt speichern, ohne die referenzierten Objekte zu kopieren.
Aufrechterhaltung der Objektgültigkeit
Bei Verwendung eines std::vector Es ist wichtig sicherzustellen, dass die von den Zeigern referenzierten Objekte während der gesamten Lebensdauer des Vektors gültig bleiben (bis sie mit erase() entfernt werden oder der Vektor zerstört wird). Intelligente Zeiger, die das Resource Acquisition Is Initialization (RAII)-Idiom nutzen, können bei der Verwaltung der Objektlebensdauer helfen und eine ordnungsgemäße Bereinigung sicherstellen, wenn das Objekt nicht mehr vom Vektor referenziert wird.
Das obige ist der detaillierte Inhalt vonKopiert „std::vector' Objekte, wenn „push_back()' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn