Почему конструкторы копии являются ненужными для неизменных объектов?

Почему конструкторы копии являются ненужными для неизменных объектов? Объясните это для меня.

9
задан Jim G. 11 March 2010 в 18:17
поделиться

4 ответа

Поскольку значение не может измениться, каждый бит так же хорошо ссылаться на один и тот же объект во всех случаях, нет необходимости иметь "дополнительную копию", так сказать .

12
ответ дан 4 December 2019 в 11:04
поделиться

Это в некоторой степени зависит от языка:

Однако для многих языков требуется конструктор копирования. Если вы его не предоставите, язык неявно сгенерирует его.

Однако с неизменяемым объектом это обычно нормально, поскольку конструктор копирования по умолчанию (как правило) делает неглубокую копию всех значений. С изменяемым типом данных (например, содержащим внутренние объектные ссылки на другие объекты) неглубокое копирование обычно является плохим выбором, поскольку копия копирует только ссылку / указатель, инкапсулированную в нем.

2
ответ дан 4 December 2019 в 11:04
поделиться

Это так естественно, потому что значение неизменяемого объекта не может быть изменено.

1
ответ дан 4 December 2019 в 11:04
поделиться

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

Конструкторы копирования ценны тем, что они позволяют вам взять один объект и создать его полностью независимую копию. Это ценно тем, что теперь вы можете изменять второй объект независимо от первого. Или компонент может создать частную копию, чтобы защитить себя от других компонентов, изменяющих объект из-под него.

Неизменяемые объекты неизменяемы. Нет смысла создавать копию объекта, который не изменится.

Теперь давайте снова поговорим о жизни. В таких языках, как C ++, конструкторы копирования также позволяют обойти проблемы с памятью / временем жизни. Например, если я пишу API, который принимает SomeType * , и я хочу сохранить его дольше, чем время жизни моего метода. В C ++ самый надежный способ сделать это - создать копию объекта с помощью конструктора копирования.

4
ответ дан 4 December 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: