我在一次采访中被问到这个问题,但我无法弄清楚为什么没有这个概念。
请告诉我。
它没有内置在语言中,因为没有合理的默认实现。
复制构造函数遭受许多与克隆相同的歧义。例如,您是要制作浅拷贝还是深拷贝取决于您的具体情况。
假设您有一个Order
带有Customer
属性的类。它的复制构造函数应该创建一个新客户还是指向原始实例?可能是原始实例 - 但是呢Order.Payment
?
更糟糕的是,即使您确实想要执行深层复制,您甚至可能无法创建所有从属对象,因为它们的构造函数(或类似的工厂方法)可能无法访问。
如果这还不够,这篇关于 Java 设计问题的文章重点介绍了其他一些问题(如类型截断)。
C# 以何种方式不支持复制构造函数的思想?您可以自由地创建一个复制任意深度的副本。
不是吗?
class Foo
{
public Foo (Foo other) // copy ctor
{ ... }
}
但也许我对 C++ 中适用的其他规则有点生疏(术语复制构造函数是在这里创造的)。