在我的一次采访中,我被问到了这个问题,但我无法确切地知道为什么这个概念不存在。
请告诉我。
答案 0 :(得分:28)
它没有内置于语言中,因为没有合理的默认实现。
复制构造函数suffer from many of the same ambiguities as cloning。例如,您是要制作浅拷贝还是深拷贝取决于您的具体情况。
假设您有一个Order
类,其Customer
属性。它的复制构造函数应该创建一个 new 客户还是指向原始实例?可能是原始实例 - 但是Order.Payment
呢?
更糟糕的是,即使你做想要执行深层复制,你甚至可能无法创建所有的从属对象,因为它们的构造函数(或类似的工厂方法)可能无法访问
如果还不够,this article on Java Design Issues会突出显示其他一些问题(例如类型截断)。
答案 1 :(得分:6)
C#以什么方式不支持复制构造函数的想法?你可以自由地创建一个可以随心所欲地复制的版本。
答案 2 :(得分:2)
不是吗?
class Foo
{
public Foo (Foo other) // copy ctor
{ ... }
}
但也许我对其他规则适用于C ++(其中术语复制构造函数)的创造有点生疏。