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
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));
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));
In C 14 können wir dies mit make_unique:
make_unique<int>(5);
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!