Heim >Backend-Entwicklung >C++ >Erstellt „std::vector::push_back()' Kopien von Objekten?

Erstellt „std::vector::push_back()' Kopien von Objekten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 22:24:02449Durchsuche

Does `std::vector::push_back()` Create Copies of Objects?

Kopiert std::vector Objekte mit push_back()?

Nach ausführlicher Analyse mit Valgrind kam man zu dem Schluss, dass std::vector Führt eine Kopie der mit push_back() eingefügten Objekte durch.

Interner Mechanismus

Im Gegensatz zum Vektor in C, der nur mit Referenzen arbeitet, speichert std::vector in C tatsächliche Objekte. Dies bedeutet, dass bei jedem Aufruf von push_back() eine Kopie des eingefügten Objekts erstellt und dem internen Array des Vektors hinzugefügt wird.

Speicherung von Zeigern

Wenn Sie beabsichtigen, Zeiger innerhalb des Vektors zu speichern, sollten Sie die Verwendung von std::vector in Betracht ziehen. anstelle von std::vector. Dadurch können Sie das Kopieren der Objekte selbst vermeiden, es muss jedoch sichergestellt werden, dass die Objekte, auf die verwiesen wird, während der gesamten Lebensdauer des Vektors gültig bleiben.

Intelligente Zeiger

Intelligente Zeiger erleichtern dies die Verwaltung der Objektlebensdauer, wodurch sichergestellt wird, dass die enthaltenen Objekte gültig bleiben, während sie vom Vektor referenziert werden. Sie nutzen das Resource Acquisition Is Initialization (RAII)-Idiom, um Ressourcen automatisch zu erwerben und freizugeben.

Zusammenfassend erstellt std::vector::push_back() eine Kopie des eingefügten Objekts, verwendet jedoch intelligente Zeiger mit std ::vector ermöglicht es Ihnen, Zeiger zu speichern, ohne die zugrunde liegenden Objekte zu kopieren, und stellt so deren Gültigkeit innerhalb der Lebensdauer des Vektors sicher.

Das obige ist der detaillierte Inhalt vonErstellt „std::vector::push_back()' Kopien von Objekten?. 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