Maison > développement back-end > C++ > Quand le constructeur de copie défini par l'utilisateur est-il nécessaire en C ?

Quand le constructeur de copie défini par l'utilisateur est-il nécessaire en C ?

Susan Sarandon
Libérer: 2024-10-24 04:39:02
original
282 Les gens l'ont consulté

When is User-Defined Copy Constructor Necessary in C  ?

Constructeur de copie défini par l'utilisateur en C

En C, le compilateur génère généralement un constructeur de copie par défaut pour les classes, qui s'exécute par membre copier. Cependant, dans certains scénarios, un constructeur de copie défini par l'utilisateur est nécessaire.

Quand un constructeur de copie défini par l'utilisateur est-il nécessaire ?

Un constructeur de copie défini par l'utilisateur est requis lorsque le comportement de copie par membre du constructeur de copie par défaut est insuffisant. Prenons l'exemple suivant :

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};

Class::Class(const char* str) {
    stored = new char[srtlen(str) + 1];
    strcpy(stored, str);
}

Class::~Class() {
    delete[] stored;
}</code>
Copier après la connexion

Dans cet exemple, le constructeur de copie par défaut copierait simplement le pointeur vers le membre stocké, plutôt que de dupliquer le tampon sous-jacent. Cela peut conduire à un comportement indéfini si une copie est détruite avant l'autre.

Constructeur de copie défini par l'utilisateur

Pour résoudre ce problème, vous pouvez définir une copie définie par l'utilisateur constructeur qui effectue une copie approfondie :

<code class="cpp">Class::Class(const Class& another) {
    stored = new char[strlen(another.stored) + 1];
    strcpy(stored, another.stored);
}</code>
Copier après la connexion

Ce constructeur de copie alloue une nouvelle mémoire et copie le contenu du membre stocké, garantissant que les deux copies ont leurs propres tampons indépendants.

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
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal