Меня задали этот вопрос в одном из моих интервью, но я не смог узнать точно, почему это понятие не там.
Пожалуйста, дайте мне знать.
В чем как C # не поддерживает идею конструктора копирования? Вы более чем свободны создать копию, которая будет копировать столько, сколько захотите.
Не так ли?
class Foo
{
public Foo (Foo other) // copy ctor
{ ... }
}
Но, возможно, я немного не понимаю, какие еще правила применяются в C++ (где был придуман термин copy constructor).
Он не встроен в язык, потому что не существует разумной реализации по умолчанию .
Конструкторы копирования страдают от многих из тех же двусмысленностей, что и клонирование . Например, то, хотите ли вы сделать неглубокую копию или глубокую копию, зависит от ваших конкретных обстоятельств.
Допустим, у вас есть класс Order
со свойством Customer
. Должен ли его конструктор копирования создавать нового клиента или указывать на исходный экземпляр? Вероятно, исходный экземпляр - но как насчет Order.Payment
?
Хуже того, даже когда вы действительно хотите выполнить глубокую копию, вы даже не сможете создать все ваши подчиненные объекты, потому что их конструкторы (или сопоставимые фабричные методы) могут быть недоступны.
В случае, если этого недостаточно, эта статья о проблемах проектирования Java освещает некоторые другие проблемы (например, усечение типов).