Heim >Backend-Entwicklung >C++ >Wie sollten „unique_ptr'-Parameter in C-Konstruktoren und -Funktionen übergeben werden?
Wie unique_ptr-Parameter in Konstruktoren und Funktionen behandelt werden sollten
Szenario
Betrachten Sie eine Klasse Base verweist auf sich selbst als folgt:
class Base { public: typedef unique_ptr<Base> UPtr; Base() {} Base(Base::UPtr n) : next(std::move(n)) {} virtual ~Base() {} void setNext(Base::UPtr n) { next = std::move(n); } protected: Base::UPtr next; };
Methoden zur Übergabe von unique_ptr-Argumenten
Um unique_ptr-Parameter effektiv zu nutzen, sollten Sie die folgenden Methoden in Betracht ziehen:
1. Nach Wert (A)
Base(std::unique_ptr<Base> n) : next(std::move(n)) {}
Beim Aufruf als Base newBase(std::move(nextBase)); überträgt diese Methode den Besitz des Zeigers auf die Funktion. Nach der Erstellung wird nextBase leer.
2. Durch nicht konstante L-Wert-Referenz (B)
Base(std::unique_ptr<Base> &n) : next(std::move(n)) {}
Dies erfordert einen tatsächlichen L-Wert (benannte Variable) und ermöglicht der Funktion, möglicherweise den Besitz des Zeigers zu beanspruchen.
3. Durch const l-value Reference (C)
Base(std::unique_ptr<Base> const &n);
Dies verhindert, dass die Funktion den Zeiger speichert, garantiert aber den Zugriff auf das Objekt für die Dauer seiner Ausführung.
4. Durch R-Wert-Referenz (D)
Base(std::unique_ptr<Base> &&n) : next(std::move(n)) {}
Ähnlich wie (B), erfordert jedoch die Verwendung von std::move bei der Übergabe nicht temporärer Argumente. Die Funktion kann Eigentum beanspruchen oder auch nicht.
Empfehlungen
Manipulation von unique_ptr
Um einen unique_ptr zu verschieben, verwenden Sie std::move. Dadurch wird ein Kopieren vermieden und eine ordnungsgemäße Eigentumsübertragung gewährleistet.
Das obige ist der detaillierte Inhalt vonWie sollten „unique_ptr'-Parameter in C-Konstruktoren und -Funktionen übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!