Le constructeur de copie en C ++

Noter cet article




copier constructeur en C ++,  c ++ constructeur de copie, Programmation C ++ pour les débutantsLorsque les débutants apprennent la programmation, première chose, при рассмотрении новой темы, 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, как параметра significative (au lieu de la liaison);
  • lors du retour de la classe de la fonction objet, как результата её работы;
  • при инициализации одного объекта класса другим объектом этого класса.

При передаче объекта в функцию как параметра 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é – удаляется и побитовая копия объекта. 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, которая будет иметь личную область динамической памяти.

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”… Выделять и освобождать память не будем. 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:

Конструктор без параметров будет вызываться во время создания новых объектов classe. Le constructeur de copie – au cours de la réalisation de copies d'un objet. Деструктор срабатывает при удалении и реального объекта и его копии. В теле функций все описано подробно и не требует дополнительных комментариев.

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во время создания нового объекта, charger constructeur sans argument. la bloc 2 мы разместили функцию showFunc(). Pendant la transmission en elle “paramètre d'objet” significative, charge constructeur de copie et de créer “réel” копия объекта класса Une classe. При выходе из этой функции сработал деструктор, так как копия объекта уничтожается. à propos, la, что передача объекта как параметра по значению, вызывает конструктор копирования, служит отличным поводом для передачи объекта по ссылке. Это сэкономит и время и память.

la bloc 3 размещена функция returnObjectFunc(). Comme indiqué dans son corps pour créer un nouvel objet de la classe Une classe сначала сработал конструктор без параметров. 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. В конце, 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. При завершении работы программы деструктор сработал для копии объекта из четвертого блока и для объекта object1 du premier bloc.

Если же мы закомментируем /*constructeur de copie * / dans la salle de classe et d'exécuter à nouveau le programme – voir, что конструктор без параметров сработает 2 plier, et destructor – Il fonctionne cinq fois.

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

В этой ситуации, если бы деструктор освобождал память — в программе возникла бы ошибка.

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.” Она раскрыта намного глубже и включает все основные нюансы использования конструктора копирования. 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. А почему в коде определен, неиспользуемый указатель?

    1. Потому что хоть какая-то переменная, член класса, должна быть определена в классе?
      Если вам не нравится указатель, определите переменную типа int.

  2. В 3-м блоке конструктор копирования не вызывается, соответственно и 2-го деструктора нет. Это для компиляторов MinGW, CLang(онлайн компилятор ). Для microsoft vc++ все работает, как и в примере.

    1. Потому что там действительно aucun объекта, в который нужно возвращать результат.
      Нужно бы записать как-то так:

      environ:

Laisser un commentaire

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