Конструктор копіювання - це
Зазвичай компілятор автоматично створює конструктор копіювання для кожного класу (відомі як неявні конструктори копіювання, тобто конструктори копіювання, задані неявним чином), але в деяких випадках програміст створює конструктор копіювання, званий в такому випадку явним конструктором копіювання (або "конструктором копіювання, заданим явно "). У подібних випадках компілятор не створює неявні конструктори.
Конструктор копіювання в основному необхідний коли об'єкт має покажчик або неподільні посилання. як наприклад, на файл. в цьому випадку вам зазвичай також буде потрібно деструктор і оператор присвоювання (див. Правило трьох).
визначення
Перший конструктор повинен застосовуватися в разі відсутності інших конструкторів. Одна з відмінностей між першим і другим конструктором полягає в тому, що змінні можуть бути скопійовані першим конструктором. наприклад:
Інша відмінність між ними досить наочно:
Наступні конструктори копіювання (або постійні конструктори) некоректні:
так як виклик цих конструкторів зажадає чергового копіювання, що призведе до нескінченного рекурсивному викликом (тобто нескінченний цикл).
Існує чотири випадки виклику конструктора копіювання:
- Коли об'єкт повертає значення
- Коли об'єкт передається (функції) за значенням в якості аргументу
- Коли об'єкт конструюється на основі іншого об'єкта (того ж класу)
- Коли компілятор генерує тимчасовий об'єкт (як в першому і другому випадках вище; як явне перетворення і т.д.)
Об'єкту може бути присвоєно значення за допомогою одного з двох способів:
- Явна присвоювання в вираженні
- ініціалізація
Явна присвоювання в вираженні
ініціалізація
Об'єкт може бути инициализирован одним із наведених нижче способів.
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 руб