Copie approfondie et copie superficielle
Question :
Quelles sont les principales différences entre copie profonde et copie superficielle ?
Réponse :
Copie superficielle :
Exemple :
<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>
Dans cette copie superficielle, pi fait référence au même objet int dans les objets original et copié.
Copie approfondie :
Exemple :
<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>
Dans cette copie complète, pi pointe vers un nouvel objet int avec la même valeur que l'original.
Type de constructeur de copie :
Le constructeur de copie par défaut dépend du comportement du constructeur de copie de chaque membre :
Exemple :
Dans Dans l'exemple suivant, le constructeur de copie par défaut crée une copie complète pour le membre std::vector en raison de son implémentation :
<code class="c++">class Y { private: std::vector<int> v; public: Y() {} Y(const Y& copy) : v(copy.v) {} };</code>
Dans ce cas, le constructeur de copie de std::vector crée une copie complète de son contenu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!