Le constructeur de copie en C ++

Le constructeur de copie en C ++
5 (100%) 2 votes




copier constructeur en C ++,  c ++ constructeur de copie, Programmation C ++ pour les débutantsLorsque les débutants apprennent la programmation, première chose, lors de l'examen d'un nouveau sujet, la question se pose – ce qui nécessite un ou l'autre “chose” Que doit-on appris aujourd'hui. répondre immédiatement à cette question: “Pourquoi avons-nous besoin constructeur de copie?”.

Le constructeur de copie requis pour, de sorte que nous pouvons créer “réel” (pas pobytovыe) copier l'objet de classe. Cette copie de l'objet peut être nécessaire dans les cas suivants:

  • quand un objet de classe à la fonction de transfert, en tant que paramètre significative (au lieu de la liaison);
  • lors du retour de la classe de la fonction objet, à la suite de son travail;
  • lors de l'initialisation d'un objet de classe par un autre objet de cette classe.

Quand un objet est passé à la fonction en tant que paramètre significative, Cette fonction va commencer à travailler avec un peu par copie bit, et non pas avec les champs de l'objet. Soit déterminé constructeur et destructeur. La première mémoire est allouée, et le second il libère. Pendant la fonction de fonctionnement, bit par copie bit des points objet de pointeur vers une adresse de mémoire, où l'objet original. tandis que, lorsque la fonction de travail est terminé – copie retiré et au niveau du bit de l'objet. Lors de sa suppression est tenu de travailler un spécifique et destructor libère la mémoire, qui est occupée par l'objet original,. Le programme se poursuivra, et arrêt, travail destructor nouveau, essayant de libérer tout le même segment de mémoire. Cela entraînera l'erreur de programme.

l'utilisation de constructeur de copie – un excellent moyen de contourner ces erreurs et problèmes. Il sera “réel” copie d'objet, ce qui aura un espace privé du tas.

Le constructeur de copie la syntaxe est la suivante:

Examinons le simple suivant, mais un très bon exemple. En elle, nous allons aborder tous 3 Dans ce cas, il est souhaitable d'utiliser constructeur de copie. la classe sera créée, contenant constructeur sans argument, constructeur de copie et destructor. Par exemple, il n'a pas été trop encombrant, Le constructeur et le destructeur affichera le type de message “concepteur Déclenchement”, “dektruktor Déclenchement”… Allouer et mémoire libre ne sera pas. Nous serons parfaitement vu combien de fois et combien designers vont travailler à nouveau Destructor. évidemment, destructor (s'il a libéré la mémoire) ne devrait pas déclencher plusieurs fois, que concepteur, allocation de mémoire.

exemple:

Sans argument constructeur est appelé lors de la création de nouvelles installations classe. Le constructeur de copie – au cours de la réalisation de copies d'un objet. Le destructor est déclenché lors du retrait et de l'objet réel et ses copies. Dans toutes les fonctions du corps est décrit en détail et ne nécessite pas de commentaires supplémentaires.

L'exécution du programme verra ce qui suit dans la console:

copier constructeur en C ++,  c ++ constructeur de copie,  Programmation en C ++ à partir de zéro

Voyons voir ce programme a généré à la console. bloc 1 – lors de la création d'un nouvel objet, charger constructeur sans argument. la bloc 2 nous avons placé la fonction showFunc(). Pendant la transmission en elle “paramètre d'objet” significative, charge constructeur de copie et de créer “réel” une copie de la classe d'objet Une classe. Lorsque vous quittez cette fonction, charge destructor, que la copie de l'objet est détruit. à propos, la, que le transfert de l'objet en tant que paramètre significative, provoque le constructeur de copie, Il est une excellente occasion pour l'objet de liaison de transmission. Cela permettra d'économiser à la fois du temps et de la mémoire.

la bloc 3 caractéristiques returnObjectFunc(). Comme indiqué dans son corps pour créer un nouvel objet de la classe Une classe – premier paramètres du constructeur de charge. Ensuite, le code de fonction est exécutée et que, lors du retour de l'objet dans la fonction principale Principal, charge constructeur de copie. A la fin de, comme il faut, destructor a travaillé deux fois: objet et sa copie réelle.

la quatrième bloc, lors de la déclaration et l'initialisation d'un nouvel objet object2, charge constructeur de copie. À la fin du programme de destructor travaillé pour une copie de l'objet à partir du quatrième bloc et objet object1 du premier bloc.

Si nous commenter /*constructeur de copie * / dans la salle de classe et d'exécuter à nouveau le programme – voir, que le constructeur sans travail paramètres 2 plier, et destructor – Il fonctionne cinq fois.

copier constructeur en C ++,  c ++ constructeur de copie, Programmation en C ++ à partir de zéro

Dans cette situation,, Si le destructor libère la mémoire - une erreur est survenue dans le programme.

Je recommande fortement la lecture de thème Le constructeur de copie dans le livre de Stephen Prata “Le langage de programmation C ++. Conférences et séminaires. 6-édition.” Elle a révélé beaucoup plus profond et comprend toutes les nuances de base de l'utilisation du constructeur de copie. L'article détaille l'opérateur d'affectation =.

Pour soutenir notre site – cliquez sur la tirelire et choisir un moyen pratique.

Bulletin de nouvelles leçons sur la programmation:

6 réflexions sur "Le constructeur de copie en C ++

  1. Et pourquoi dans le code défini, pointeur utilisé?

    1. Parce que au moins une variable, membre de la classe, Il doit être défini dans la classe?
      Si vous ne voulez pas un pointeur, définir une variable de type int.

  2. Dans le 3ème constructeur de copie bloc n'est pas causé, respectivement, et le 2ème est pas destructor. Ceci est pour les compilateurs MinGW, Bruit(compilateur en ligne ). Pour Microsoft vc ++ tous les travaux, comme dans l'exemple.

    1. Parce qu'il est vraiment aucun objet, dans lequel vous devez renvoyer un résultat.
      Vous devez enregistrer quelque chose comme ça:

      environ:

Laisser un commentaire

Placez le code dans les balises: <pre class="lang:c ++ décodage:true ">VOTRE CODE</pré>