При программировании С++ мы при необходимости использовали конструкторы копирования (или нас учили). При переходе на Java несколько лет назад я заметил, что теперь используется интерфейс Cloneable. С# соответствует тому же маршруту, определяющему интерфейс ICloneable. Мне кажется, что клонирование является частью определения ООП. Но мне интересно, почему были созданы эти интерфейсы, и конструктор копирования, похоже, был удален?
Когда я подумал об этом, я пришел к мысли, что конструктор копирования не будет полезен, если нужно сделать копию объекта, тип которого неизвестен (как в случае ссылки на базовый тип). Это кажется логичным. Но мне интересно, есть ли другие причины, о которых я не знаю, для которых интерфейсы Cloneable были предпочтительнее конструкторов копирования?