Heim > Backend-Entwicklung > C++ > Warum kann ich eindeutige Zeiger nicht direkt in Vektoren einfügen?

Warum kann ich eindeutige Zeiger nicht direkt in Vektoren einfügen?

Susan Sarandon
Freigeben: 2024-12-25 02:15:13
Original
799 Leute haben es durchsucht

Why Can't I Directly Push Unique Pointers into Vectors?

Probleme beim Schieben eindeutiger Zeiger in Vektoren

Bei dem Versuch, eindeutige Zeiger innerhalb eines Vektors zu manipulieren, können Programmierer auf Schwierigkeiten stoßen. Dieser Artikel soll erklären, warum dieses Problem auftritt, und eine Lösung anbieten.

Beachten Sie den folgenden Codeausschnitt:

std::vector<std::unique_ptr<int>> vec;

int x(1);
std::unique_ptr<int> ptr2x(&x);
vec.push_back(ptr2x); // Error: Can't copy a unique_ptr
Nach dem Login kopieren

Dieser Code generiert aufgrund der zugrunde liegenden Prinzipien eindeutiger Zeiger einen Fehler. Ein eindeutiger Zeiger stellt sicher, dass nur ein einziger Container den verwalteten Zeiger steuert. Daher ist das Kopieren oder Erstellen mehrerer eindeutiger Zeiger auf dasselbe Objekt verboten.

Um dieses Problem zu lösen, müssen wir den Verschiebungskonstruktor verwenden, der den Besitz des Zeigers von einem eindeutigen Zeiger auf einen anderen überträgt. Hier ist der korrigierte Code:

vec.push_back(std::move(ptr2x));
Nach dem Login kopieren

Es ist wichtig zu beachten, dass die Verwendung eindeutiger Zeiger zur Verwaltung von Zeigern auf lokale Variablen, wie z. B. x im bereitgestellten Beispiel, falsch ist. Lokale Variablen werden automatisch verwaltet und ihre Lebensdauer endet, wenn der enthaltende Block abgeschlossen ist. Ordnen Sie stattdessen Objekte dynamisch zu:

std::unique_ptr<int> ptr(new int(1));
Nach dem Login kopieren

In C 14 können wir dies mit make_unique:

make_unique<int>(5);
Nach dem Login kopieren
weiter vereinfachen

Das obige ist der detaillierte Inhalt vonWarum kann ich eindeutige Zeiger nicht direkt in Vektoren einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage