|
1
4
我喜欢您在这里对深度复制上下文中组合和聚合的角色所做的区分。 我要反驳另一个答案,说:不,一个对象不应该深入复制它不拥有的另一个对象。 人们会期望一个对象的深度副本(至少在最初)与原始副本相同。如果一份深度复制品是由原作不拥有的参考资料制成的,那么这就留下了一个问题,即新复制品的所有者是谁。如果克隆拥有它,那么它将与原始对象不相同。它将是一个与原始对象类似的对象,除非它拥有对其聚合成员之一的引用。这肯定会导致混乱。如果克隆人不拥有它,那么谁拥有? 在非垃圾收集语言中,所有权问题尤其重要,但即使是垃圾收集器,也会造成问题。例如,如果克隆被设置为允许对对象进行未提交的更改,是否允许对它引用的其他对象进行更改?如果不允许更改,那么就没有理由进行深度复制。如果允许更改,那么如何提交这些更改,因为要修改的对象不控制此引用的对象?当然,这样做的机制可能是人为的,但这无疑意味着克隆对象超出了其职责范围,而程序将是维护的噩梦。 包含无主对象的深度复制操作也会导致无限(或至少过度)复制操作的问题。假设一个对象是集合的一部分,进一步假设该对象需要对集合的引用。然后,对该对象的简单的深度复制操作将创建集合及其每个成员的新副本。即使假设我们避免了无限递归的问题,并且保持这个新对象集之间的所有引用都一致,对于大多数目的来说,仍然是过度的,对于那些需要新集合的情况,为了这个目的,深入复制集合本身而不是它的一个成员是否更有意义? 我认为,正如您所建议的,深度复制只包含所拥有的对象是大多数情况下唯一明智的方法。 |
|
2
1
将oposite中的deep copy复制到shallow中,应该递归地将整个对象复制到地面,并对对象和包含的所有对象进行全新的复制。 所以是的,它应该复制变量,而不仅仅是链接。 |
|
|
Reborok · 对象“具有SWT类所尊重的字段”的序列化 8 年前 |
|
|
Spears · PHP克隆(深度复制) 8 年前 |
|
|
Naetmul · 深度复制2D可变列表的简明方法是什么? 9 年前 |
|
|
ascetic652 · 深度复制和动态转换unique_ptr 9 年前 |
|
|
Nikordaris · ArangoDB将顶点和边复制到邻居 10 年前 |