Heim >Backend-Entwicklung >C++ >Wie kann ich einen „std::unique_ptr' korrekt in einen „std::vector' verschieben?

Wie kann ich einen „std::unique_ptr' korrekt in einen „std::vector' verschieben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-28 13:07:16480Durchsuche

How Can I Correctly Push a `std::unique_ptr` into a `std::vector`?

Unique_Ptr kann nicht in einen Vektor zurückgeschoben werden

Der bereitgestellte Code versucht, einen std::unique_ptr in einen Vektor zu schieben, was dazu führt ein Kompilierungsfehler aufgrund der Unfähigkeit, einen Kopiervorgang für den eindeutigen Zeiger durchzuführen.

Erinnern Sie sich daran std::unique_ptr stellt den exklusiven Besitz des enthaltenen Zeigers auf ein bestimmtes Objekt sicher. Dies bedeutet, dass bei der Zuweisung eines eindeutigen Zeigers der Besitz verschoben und nicht kopiert wird. Folglich ist das Erstellen von Kopien eines eindeutigen Zeigers verboten, da mehrere Eigentümer seine eindeutige Eigentumsgarantie verletzen würden.

Um das Problem zu beheben und den eindeutigen Zeiger korrekt in den Vektor zu verschieben, verwenden Sie die Funktion std::move wie folgt:

vec.push_back(std::move(ptr2x));

std::move überträgt den Besitz des eindeutigen Zeigers auf den Vektor und ermöglicht so dessen Einfügung in den Vektor, ohne den eindeutigen Besitz zu verletzen Regel.

Es ist wichtig zu beachten, dass die anfängliche Verwendung von std::unique_ptr in diesem Code falsch ist. Es versucht, einen Zeiger auf eine lokale Variable zu verwalten, was der erforderlichen Kontrolle über die Lebensdauer des Objekts widerspricht. Um diese Diskrepanz zu verhindern, weisen Sie das Objekt dynamisch zu, beispielsweise mit:

std::unique_ptr<int> ptr(new int(1));

Das obige ist der detaillierte Inhalt vonWie kann ich einen „std::unique_ptr' korrekt in einen „std::vector' verschieben?. 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