Heim > Backend-Entwicklung > C++ > Wie gehe ich beim Kopieren einer Klasse mit eindeutigen Zeigern um?

Wie gehe ich beim Kopieren einer Klasse mit eindeutigen Zeigern um?

Patricia Arquette
Freigeben: 2024-12-15 16:00:24
Original
699 Leute haben es durchsucht

How to Handle Unique Pointers When Copying a Class?

Kopieren eines eindeutigen Zeigers in einer Klasse

Das Kopieren einer Klasse, die als Mitglied einen eindeutigen Zeiger enthält, erfordert besondere Überlegungen. Ein eindeutiger Zeiger kann nicht gemeinsam genutzt werden, was entweder eine tiefe Kopie seines Inhalts oder eine Konvertierung in einen gemeinsam genutzten Zeiger erfordert.

Deep Copying

Der Deep-Copy-Ansatz erstellt einen neuen eindeutigen Zeiger und initialisiert ihn mit einer Kopie des Inhalts des ursprünglichen Zeigers:

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

Hier der Kopierkonstruktor von A deep kopiert den int, auf den der ursprüngliche eindeutige Zeiger zeigt.

Konvertierung in einen gemeinsam genutzten Zeiger

Alternativ können Sie den eindeutigen Zeiger in einen gemeinsam genutzten Zeiger konvertieren, was dies ermöglicht zur gemeinsamen Nutzung durch mehrere Objekte:

class B
{
   std::unique_ptr<int> up_;

public:
   B(int i) : up_(new int(i)) {}
   B(const B& b)
   {
      up_ = std::make_shared(*b.up_);
   }
};
Nach dem Login kopieren

In diesem Beispiel konvertiert der Kopierkonstruktor von B den eindeutigen Zeiger in einen gemeinsam genutzten Zeiger, der es mehreren Kopien von B ermöglicht, auf dieselben zugrunde liegenden Daten zuzugreifen.

Andere Operatoren

Um nahtlos mit Containern wie std::vector zu arbeiten, sind normalerweise zusätzliche Operatoren erforderlich erforderlich:

  • Umzug Konstrukteur:

    B(B&& b)
    {
     up_ = std::move(b.up_);
    }
    Nach dem Login kopieren
  • Aufgabe kopieren:

    B& operator=(const B& b)
    {
     up_ = std::make_shared(*b.up_);
     return *this;
    }
    Nach dem Login kopieren
  • Verschieben Zuweisung:

    B& operator=(B&& b)
    {
     up_ = std::move(b.up_);
     return *this;
    }
    Nach dem Login kopieren

Diese Operatoren sorgen dafür, dass Objekte in verschiedenen Kontexten sicher zugewiesen und kopiert werden können.

Das obige ist der detaillierte Inhalt vonWie gehe ich beim Kopieren einer Klasse mit eindeutigen Zeigern um?. 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