Вчера я спросил вопрос о копировании объектов на С#, и большинство ответов было сосредоточено на различии между глубокой копией и мелкой copy, и тот факт, что должно быть ясно, какой из обоих вариантов копирования реализует данный конструктор копирования (или оператор или функция). Я нахожу это странным.
Я написал много программного обеспечения на С++, язык, который сильно зависит от копирования, и мне никогда не требовалось несколько вариантов копирования. Единственная операция копирования, которую я когда-либо использовал, - это тот, который я называю " достаточно глубокой копией". Он выполняет следующие действия:
- Если объект имеет право собственности на переменную-член (cf. composition), он копируется рекурсивно.
- Если объект не имеет права собственности на переменную-член (см. aggregation), копируется только ссылка.
Теперь мой вопрос трижды:
- 1) Требуется ли когда-нибудь объект более одного варианта копирования?
- 2) Требуется ли функция копирования для определения того, какой вариант копирования он реализует?
- 3) В стороне, есть ли лучший термин для того, что я называю "достаточно глубокой копией"? Я задал вопрос об определении термина "глубокая копия" .