Конструктор копіювання - це

Зазвичай компілятор автоматично створює конструктор копіювання для кожного класу (відомі як неявні конструктори копіювання, тобто конструктори копіювання, задані неявним чином), але в деяких випадках програміст створює конструктор копіювання, званий в такому випадку явним конструктором копіювання (або "конструктором копіювання, заданим явно "). У подібних випадках компілятор не створює неявні конструктори.

Конструктор копіювання в основному необхідний коли об'єкт має покажчик або неподільні посилання. як наприклад, на файл. в цьому випадку вам зазвичай також буде потрібно деструктор і оператор присвоювання (див. Правило трьох).

визначення

Перший конструктор повинен застосовуватися в разі відсутності інших конструкторів. Одна з відмінностей між першим і другим конструктором полягає в тому, що змінні можуть бути скопійовані першим конструктором. наприклад:

Інша відмінність між ними досить наочно:

Наступні конструктори копіювання (або постійні конструктори) некоректні:

так як виклик цих конструкторів зажадає чергового копіювання, що призведе до нескінченного рекурсивному викликом (тобто нескінченний цикл).

Існує чотири випадки виклику конструктора копіювання:

  1. Коли об'єкт повертає значення
  2. Коли об'єкт передається (функції) за значенням в якості аргументу
  3. Коли об'єкт конструюється на основі іншого об'єкта (того ж класу)
  4. Коли компілятор генерує тимчасовий об'єкт (як в першому і другому випадках вище; як явне перетворення і т.д.)

Об'єкту може бути присвоєно значення за допомогою одного з двох способів:

  • Явна присвоювання в вираженні
  • ініціалізація

Явна присвоювання в вираженні

ініціалізація

Об'єкт може бути инициализирован одним із наведених нижче способів.

b. За допомогою аргументів функції

c. За допомогою значення, що повертається функції

Конструктор копіювання використовується тільки в останньому випадку (ініціалізації) і не використовується замість присвоювання (тобто там, де використовується оператор присвоювання).

Неявний конструктор копіювання класу викликає базові конструктори копіювання і копії їх членів, що відповідають їх типу. Якщо це тип класу, то викликається конструктор копіювання. Якщо це скалярний тип, то використовується вбудований оператор присвоювання. І нарешті, якщо це масив, то кожен елемент копіюється відповідним їх типу чином. [2]

Застосуванням явного конструктора копіювання програміст може визначити подальші дії після копіювання об'єкта.

Наступні приклади ілюструють як працюють конструктори копіювання і чому вони іноді потрібні.

Неявний конструктор копіювання

Розглянемо наступний приклад.

Як і очікувалося, timmy скопіювали в новий об'єкт timmy_clone. При зміні віку (age) timmy. у timmy_clone вік не змінювався. Це тому що вони є повністю незалежними об'єктами.

Компілятор згенерував для нас конструктор копіювання, який може бути записаний приблизно так:

Так коли ж нам реально потрібно явний конструктор копіювання? У наступному підрозділі розглянемо це питання.

Явний конструктор копіювання

Тепер розглянемо дуже простий клас динамічних масивів, як наприклад, нижченаведений:

Хоча ми не вказували конструктор копіювання, компілятор згенерував його для нас. Генерований конструктор виглядає приблизно так:

Конструктори копіювання і шаблони

Всупереч очікуванням шаблон конструктора копіювання - НЕ явний конструктор копіювання. Таким чином цього буде недостатньо:

Явний, тобто НЕ шаблонний, конструктор копіювання має також реалізовувати масив (Array) на основі масиву (Array).

Дивись також

Дивитися що таке "Конструктор копіювання" в інших словниках:

Конструктор (програмування) - Цей термін має також інші значення див. Конструктор. В об'єктно орієнтованому програмуванні конструктор класу (від англ. Constructor, іноді скорочують ctor) спеціальний блок інструкцій, що викликається при створенні об'єкта. ... ... Вікіпедія

ГОЛОВНИЙ КОНСТРУКТОР ПРОЕКТУ - Посадові обов'язки. Здійснює керівництво розробкою комплексних проектів на всіх стадіях і етапах виконання робіт, забезпечуючи при цьому їх економічну ефективність і конкурентоспроможність, високий. експлуатаційні зручності, ... ... Кваліфікаційний довідник посад керівників, фахівців та інших службовців

ВЕДУЧИЙ КОНСТРУКТОР - Посадові обов'язки. Здійснює керівництво і організацію окремих стадій або напрямків проектно конструкторських робіт, бере участь у вирішенні всіх пов'язаних з цим науково технічних питань. Розробляє технічні завдання на ... ... Кваліфікаційний довідник посад керівників, фахівців та інших службовців

ГОЛОВНИЙ КОНСТРУКТОР - Посадові обов'язки. Керує створенням нових і модернізацією конструкцій виробів (комплексів, машин, апаратів, приладів, механізмів) діючого виробництва, забезпечуючи їх високий. конкуренто і патентоспроможність, відповідність ... ... Кваліфікаційний довідник посад керівників, фахівців та інших службовців

Одинак ​​(шаблон проектування) - Цей термін має також інші значення див. Одинак. Шаблон проектування Одинак ​​Singleton Тип: породжує Описано в Design Patterns Так Одинак ​​(англ. Singleton) в програмуванні # 160 ... Вікіпедія

  • Конструктор копіювання. Джессі Рассел. Ця книга буде виготовлена ​​в відповідності з Вашим замовленням за технологією Print-on-Demand. High Quality Content by WIKIPEDIA articles! Конструктором копіювання (в англомовній літературі ... Детальніше Купити за 1125 руб