Maison > développement back-end > C++ > le corps du texte

Copie profonde ou superficielle : quand choisir laquelle ?

DDD
Libérer: 2024-10-28 00:15:29
original
584 Les gens l'ont consulté

 Deep vs. Shallow Copy: When Should You Choose Which?

Copie profonde ou superficielle en programmation

La copie superficielle implique la création d'un nouvel objet qui fait référence aux mêmes données sous-jacentes que l'original. En revanche, la copie profonde construit un nouvel objet qui contient des doublons indépendants de toutes les données associées à l'original.

Considérez la classe C suivante :

<code class="c++">class X {
public:
    int i;
    int *pi;
    X() : pi(new int) {}
    X(const X& copy) : i(copy.i), pi(copy.pi) {}
};</code>
Copier après la connexion

Dans ce cas, une copie superficielle en résultera dans les objets X originaux et copiés pointant vers le même objet int lors de l'attribution de pi :

<code class="c++">X original;
X copy(original);</code>
Copier après la connexion

D'autre part, la copie profonde inclut une étape dans le constructeur de copie où un nouvel objet int est alloué :

<code class="c++">class X {
public:
    int i;
    int *pi;
    X() : pi(new int) {}
    X(const X& copy) : i(copy.i), pi(new int(*copy.pi)) {}
};</code>
Copier après la connexion

En conséquence, l'objet X copié aura son propre objet int avec la même valeur que l'original.

Au départ, on pensait que le constructeur de copie par défaut effectuait toujours des copies superficielles. Cependant, il a été précisé que le comportement dépend du type de chaque membre. La norme spécifie la copie par membre, ce qui signifie que les types scalaires (comme int dans cet exemple) sont copiés à l'aide de l'opérateur d'affectation intégré.

Par conséquent, le choix entre la copie profonde et superficielle dépend des exigences spécifiques de l'application. et les caractéristiques des données copiées.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal