Heim >Backend-Entwicklung >C++ >Wie soll ich in C eindeutige Zeiger als Funktions- oder Konstruktorargumente übergeben?
Eindeutige Zeiger (unique_ptr) wahren das Prinzip des eindeutigen Besitzes in C 11. Beim Umgang Bei eindeutigen Zeigern als Funktions- oder Konstruktorargumente ergeben sich bei eindeutigen Zeigern mehrere Optionen Implikationen.
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Diese Methode überträgt den Besitz des eindeutigen Zeigers auf die Funktion/das Objekt. Der Inhalt des Zeigers wird in die Funktion verschoben, sodass der ursprüngliche Zeiger nach der Operation leer bleibt.
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Ermöglicht Die Funktion kann sowohl auf den eindeutigen Zeiger zugreifen als auch möglicherweise dessen Besitz beanspruchen. Dieses Verhalten ist jedoch nicht garantiert und erfordert eine Überprüfung der Funktionsimplementierung, um festzustellen, wie sie mit dem Zeiger umgeht.
Base(std::unique_ptr<Base> const &n);
Verhindert, dass die Funktion den Besitz des eindeutigen Zeigers beansprucht. Auf den Zeiger kann zugegriffen, aber nicht gespeichert oder geändert werden.
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Vergleichbar mit der Übergabe per nicht konstanter L-Wert-Referenz , erfordert jedoch die Verwendung von std::move bei der Übergabe nicht temporärer Argumente. Das Eigentum kann von der Funktion beansprucht werden oder nicht, was es weniger vorhersehbar macht.
Um einen eindeutigen Zeiger zu verschieben, Verwenden Sie std::move. Das Kopieren eines eindeutigen Zeigers ist nicht zulässig:
std::unique_ptr<Base> newPtr(std::move(oldPtr));
Das obige ist der detaillierte Inhalt vonWie soll ich in C eindeutige Zeiger als Funktions- oder Konstruktorargumente übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!