Глава 17
Конструкторы:
копирование и присваивание
*
Эта глава посвящена конструктору копий (copy constructor) и операции присваивания (assignment operator). Эти два элемента вполне заслужили отдельную главу. Создание программ на C++ без понимания внутренней сущности этих функций-членов сродни бегу на марафонскую дистанцию без тренировки (возможно, это не самое удачное сравнение; проще говоря, эти функции очень важны).
Данная глава следует за главами о перегрузке функций и операций потому, что без перегрузки эти две функции немыслимы. Конструктор копий — это перегружаемая функция, и операция присваивания (=) также перегружаемая оператор-функция.
Конструктор копий служит для создания новых объектов из существующих. Операция присваивания нужна для того, чтобы сделать один существующий объект эквивалентным другому существующему.
Зададимся вопросом: "Что означает создать копию?" По-видимому, это означает присваивание значений элементов одного объекта элементам другого. Этот ответ, однако, далеко не полон. C++ — это язык, который практически не ограничивает выбор пути реализации программы. Способ присваивания объектов — не исключение из этого правила.
Если для копирования ваших классов достаточно просто привести один объект в то же состояние, что и другой, прекрасно. Это весьма просто, и мы увидим, как это делается. Однако если вашему приложению требуются другие методы копирования, C++ не станет создавать их за вас. В текущей главе обсуждаются все аспекты этого вопроса, по разделам:
• Понятие копирования
• Четыре наиболее важных функции-члена класса
• Буквальное копирование и развернутое копирование