Шрифт:
• Поверхностное копирование (shallow copy) предусматривает копирование только указателя, поэтому в результате на один и тот же объект могут ссылаться два указателя. Именно этот механизм копирования лежит в основе работы указателей и ссылок.
• Глубокое копирование (deep copy) предусматривает копирование информации, на которую ссылается указатель, так что в результате два указателя ссылаются на разные объекты. На основе этого механизма копирования реализованы классы
Рассмотрим пример поверхностного копирования.
Эту ситуацию можно проиллюстрировать следующим образом.
В противоположность этому мы можем осуществить глубокое копирование.
Эту ситуацию можно проиллюстрировать так.
18.3. Основные операции
• Конструкторы с одним или несколькими аргументами.
• Конструктор по умолчанию.
• Копирующий конструктор (копирование объектов одинаковых типов).
• Копирующее присваивание (копирование объектов одинаковых типов).
• Деструктор.
Обычно класс должен иметь один или несколько конструкторов, аргументы которых инициализируют объект.
Как видим, смысл и использование инициализатора полностью определяются конструктором. Стандартный конструктор класса
Конструкторы, имеющие аргументы, сильно зависят от класса, в котором они реализованы. Остальные операции имеют более или менее стандартную структуру.
Как понять, что в классе необходим конструктор по умолчанию? Он требуется тогда, когда мы хотим создавать объекты класса без указания инициализатора. Наиболее распространенный пример такой ситуации возникает, когда мы хотим поместить объекты класса в стандартный контейнер, имеющий тип
Итак, иметь конструктор по умолчанию часто бывает полезно. Возникает следующий вопрос: а когда именно целесообразно иметь конструктор по умолчанию? Ответ: когда мы можем установить инвариант класса с осмысленным и очевидным значением по умолчанию. Для числовых типов, таких как