Heim  >  Artikel  >  Backend-Entwicklung  >  Deep Copy vs. Shallow Copy: Wann benötige ich eine echte Kopie meiner Daten?

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-27 11:01:30833Durchsuche

 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>

    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>

    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>

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!

Stellungnahme:
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