15

我在一次采访中被问到这个问题,但我无法弄清楚为什么没有这个概念。

请告诉我。

4

3 回答 3

30

它没有内置在语言中,因为没有合理的默认实现

复制构造函数遭受许多与克隆相同的歧义。例如,您是要制作浅拷贝还是深拷贝取决于您的具体情况。

假设您有一个Order带有Customer属性的类。它的复制构造函数应该创建一个客户还是指向原始实例?可能是原始实例 - 但是呢Order.Payment

更糟糕的是,即使您确实想要执行深层复制,您甚至可能无法创建所有从属对象,因为它们的构造函数(或类似的工厂方法)可能无法访问。

如果这还不够,这篇关于 Java 设计问题的文章重点介绍了其他一些问题(如类型截断)。

于 2010-04-20T15:31:54.140 回答
7

C# 以何种方式不支持复制构造函数的思想?您可以自由地创建一个复制任意深度的副本。

于 2010-04-20T15:27:32.927 回答
1

不是吗?

class Foo
{
   public Foo (Foo other)   // copy ctor
   { ... }
}

但也许我对 C++ 中适用的其他规则有点生疏(术语复制构造函数是在这里创造的)。

于 2010-04-20T15:27:11.907 回答