Heim > Backend-Entwicklung > C++ > Hauptteil

Deep Copy vs. Shallow Copy: Wann benötige ich eine echte Kopie meiner Daten?

Barbara Streisand
Freigeben: 2024-10-27 11:01:30
Original
832 Leute haben es durchsucht

 Deep Copy vs. Shallow Copy: When Do I Need a True Copy of My Data?

Deep Copy vs. Shallow Copy

Frage:

Was sind die Hauptunterschiede zwischen tiefe Kopie und flache Kopie?

Antwort:

Flache Kopie:

  • Kopiert die Werte des Objekts, behält sie aber bei Verweise auf gemeinsam genutzte Objekte.
  • Beispiel:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(copy.pi) {}
    };</code>
    Nach dem Login kopieren

    In dieser flachen Kopie verweist pi auf dasselbe int-Objekt sowohl im Original als auch im kopierten Objekt.

Deep Copy:

  • Erstellt eine vollständige Kopie des Originalobjekts, einschließlich aller eingebetteten Objekte.
  • Beispiel:

    <code class="c++">class X {
    private:
      int i;
      int *pi;
    public:
      X() : pi(new int) {}
      X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {}
    };</code>
    Nach dem Login kopieren

    In dieser tiefen Kopie zeigt pi auf ein neues int-Objekt mit demselben Wert wie das Original.

Konstruktortyp kopieren:

Der Standardkopierkonstruktor hängt vom Verhalten des Kopierkonstruktors jedes Mitglieds ab:

  • Für Skalartypen wird der Standardzuweisungsoperator verwendet, was zu einer flachen Kopie führt.
  • Es ist jedoch nicht ganz richtig zu sagen, dass der Standard-Kopierkonstruktor immer eine flache Kopie durchführt. Abhängig vom Kopierverhalten der Mitgliedstypen könnte eine tiefe Kopie oder sogar eine Kombination aus tiefer und flacher Kopie implementiert werden.

Beispiel:

In Im folgenden Beispiel erstellt der Standard-Kopierkonstruktor aufgrund seiner Implementierung eine tiefe Kopie für das Mitglied std::vector:

<code class="c++">class Y {
private:
    std::vector<int> v;
public:
    Y() {}
    Y(const Y& copy) : v(copy.v) {}
};</code>
Nach dem Login kopieren

In diesem Fall erstellt der Kopierkonstruktor von std::vector eine tiefe Kopie davon Inhalt.

Das obige ist der detaillierte Inhalt vonDeep Copy vs. Shallow Copy: Wann benötige ich eine echte Kopie meiner Daten?. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!