【发布时间】:2019-06-13 12:57:12
【问题描述】:
注意:我知道这个问题:Why doesn't Java have a copy constructor?。这个问题略有不同。
我知道下面的 sn-p 只会创建一个对某处存在的对象的新引用:
MyClass obj = new MyClass();
MyClass copy = obj;
但为什么 Java 在以下情况下不提供默认的复制构造函数:
MyClass obj = new MyClass();
MyClass copy = new MyClass(obj);
我相信隐式复制构造函数可以做与 C++ 类似的事情,即在每个成员上调用复制构造函数。这将导致对象的深拷贝,假设所有管理资源的类都正确实现了它们的拷贝构造函数。
添加这样的特性也应该是向后兼容的,因为现在第二个 sn-p 不会在没有明确的类复制构造函数的情况下编译。
所以,为了让我的问题更准确:
- 是否有什么阻止 Java 创建隐式复制构造函数,它会调用所有成员的复制构造函数?
- 现在添加隐式复制构造函数是否会破坏任何现有程序?
【问题讨论】:
-
@BladeMight - 正如 OP 所说,这个问题与那个不同。
-
@T.J.Crowder 但是这个问题还有其他答案,我认为可以解决 OP 的问题。
-
@T.J.Crowder 喜欢这个:stackoverflow.com/a/827821/5420570
-
@BladeMight - 我看不出这如何回答问题末尾的两个要点。 (请注意,我认为这个问题无论如何都是题外话......)
标签: java language-lawyer