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