Heim > Artikel > Backend-Entwicklung > Deep Copy vs. Shallow Copy: Wann muss ich die Daten klonen?
Deep Copy vs. Shallow Copy: Ein genauerer Blick
Bei der objektorientierten Programmierung ist es entscheidend, den Unterschied zwischen Deep und Shallow Copy zu verstehen . Schauen wir uns die Konzepte genauer an, um den Unterschied zu verdeutlichen.
Flache Kopie
Eine flache Kopie erstellt ein neues Objekt, das auf dieselben Objekte wie das Originalobjekt verweist. Das heißt, wenn sich eines der Objekte ändert, wirkt sich dies sowohl auf das ursprüngliche als auch auf das kopierte Objekt aus.
Betrachten Sie das folgende Beispiel:
<code class="cpp">class X { private: int i; int *pi; public: X() : pi(new int) {} X(const X& copy) : i(copy.i), pi(copy.pi) {} };</code>
In diesem Szenario zeigt das Pi-Mitglied auf dasselbe Ganzzahl sowohl im ursprünglichen als auch im kopierten Es gibt keine gemeinsamen Objekte zwischen den ursprünglichen und kopierten Objekten.
Hier ist ein modifiziertes Beispiel:
In diesem Fall zeigt das Pi-Mitglied der ursprünglichen und kopierten X-Objekte auf unterschiedliche Ganzzahlen Objekte, aber beide enthalten den gleichen Wert.Kopierkonstruktor
<code class="cpp">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>
Beim Erstellen einer Kopie eines Objekts wird ein Kopierkonstruktor verwendet. Der Standard-Kopierkonstruktor (sofern nicht explizit vom Programmierer definiert) führt normalerweise eine flache Kopie durch, außer für Mitglieder, die ihre eigenen benutzerdefinierten Kopierkonstruktoren haben.
Es ist jedoch wichtig zu beachten, dass das Verhalten eines Kopierkonstruktors dies kann variieren je nach den darin enthaltenen spezifischen Datenelementen. Einige Mitglieder können tiefe Kopien, flache Kopien oder eine Kombination davon durchführen.
Das obige ist der detaillierte Inhalt vonDeep Copy vs. Shallow Copy: Wann muss ich die Daten klonen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!