Heim > Backend-Entwicklung > C++ > Wie sollten „unique_ptr'-Parameter in C-Konstruktoren und -Funktionen übergeben werden?

Wie sollten „unique_ptr'-Parameter in C-Konstruktoren und -Funktionen übergeben werden?

Barbara Streisand
Freigeben: 2024-12-18 10:08:11
Original
216 Leute haben es durchsucht

How Should `unique_ptr` Parameters Be Passed in C   Constructors and Functions?

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;
};
Nach dem Login kopieren

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)) {}
Nach dem Login kopieren

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)) {}
Nach dem Login kopieren

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);
Nach dem Login kopieren

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)) {}
Nach dem Login kopieren

Ä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

  • Methode (A) sollte verwendet werden, wenn das Eigentum an der Funktion übertragen wird .
  • Methode (C) wird für Funktionen empfohlen, die einfach das verwenden unique_ptr für deren Dauer.
  • Methode (D) sollte aufgrund ihrer Mehrdeutigkeit hinsichtlich der Eigentumsübertragung vermieden werden.

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!

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