Heim > Backend-Entwicklung > C++ > Wie kopiert man C 11-Klassen, die „unique_ptr'-Mitglieder enthalten, ordnungsgemäß?

Wie kopiert man C 11-Klassen, die „unique_ptr'-Mitglieder enthalten, ordnungsgemäß?

Barbara Streisand
Freigeben: 2024-12-03 00:30:10
Original
840 Leute haben es durchsucht

How to Properly Copy C  11 Classes Containing `unique_ptr` Members?

Kopieren von Klassen mit eindeutigen Zeigern in C 11

Erstellen eines Kopierkonstruktors für eine Klasse, die einen unique_ptr enthält, einen intelligenten Zeiger, der den exklusiven Besitz erzwingt stellt einzigartige Herausforderungen dar. In C 11 erfordert die Verwaltung von unique_ptr-Mitgliedern sorgfältige Überlegungen.

Lösung:

Um einen Kopierkonstruktor zu implementieren, haben Sie zwei Möglichkeiten:

  1. Deep Copy: Erstellen Sie eine neue Kopie des Inhalts von unique_ptr. Dadurch wird sichergestellt, dass beide Objekte unabhängig voneinander Eigentümer ihrer Daten sind.
class A {
  std::unique_ptr<int> up_;
public:
  A(int i) : up_(new int(i)) {}
  A(const A& a) : up_(new int(*a.up_)) {}
};
Nach dem Login kopieren
  1. In shared_ptr konvertieren: Konvertieren Sie den unique_ptr in einen shared_ptr, der mehrere Besitzer ermöglicht.
std::shared_ptr<int> sp = std::make_shared<int>(*up_);
Nach dem Login kopieren

Zusätzlich Überlegungen:

  • Verschiebekonstruktor: Anstelle eines Kopierkonstruktors können Sie einen Verschiebungskonstruktor verwenden, der den Besitz des unique_ptr überträgt.
A(A&& a) : up_(std::move(a.up_)) {}
Nach dem Login kopieren
  • Andere Operatoren überladen: Für einen vollständigen Satz von Operationen: Es ist hilfreich, die Zuweisungsoperatoren zu überladen.
A& operator=(const A& a) { up_.reset(new int(*a.up_)); return *this; }
A& operator=(A&& a) { up_ = std::move(a.up_); return *this; }
Nach dem Login kopieren
  • Überlegungen zu Vektoren: Wenn Sie beabsichtigen, Ihre Klasse in einem std::vector zu verwenden, entscheiden Sie, ob der Vektor ist ausschließlicher Eigentümer der Objekte. Sie können das Nur-Verschieben-Verhalten erzwingen, indem Sie den Kopierkonstruktor und die Kopierzuweisungsoperatoren weglassen.

Das obige ist der detaillierte Inhalt vonWie kopiert man C 11-Klassen, die „unique_ptr'-Mitglieder enthalten, ordnungsgemäß?. 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