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>
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>
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!