gpt4 book ai didi

language-agnostic - 深度复制操作是否递归复制它不拥有的子变量?

转载 作者:行者123 更新时间:2023-12-04 19:21:13 27 4
gpt4 key购买 nike

给定一个对象,它有一个不属于它的变量;即变量由aggregation组成而不是 composition .深度复制操作会复制变量还是只复制指向它的链接?

最佳答案

我喜欢你在这里对深拷贝上下文中组合和聚合的作用做出的区分。

我将反对另一个答案并说:不,一个对象不应该深度复制它不拥有的另一个对象。

人们会期望对象的深拷贝(至少在最初)与原始对象相同。如果深拷贝是由原始不拥有的引用制作的,那么这就留下了新副本拥有者的问题。如果克隆拥有它,那么它就不会与原始对象相同。它将是一个与原始对象类似的对象,只是它拥有对其聚合成员之一的引用。这肯定会导致困惑。如果克隆人不拥有它,那么谁拥有它?

这个所有权问题在非垃圾收集语言中尤其重要,但即使是垃圾收集器也会产生问题。例如,如果进行克隆以允许对对象进行未提交的更改,那么是否允许对其引用的其他对象进行更改?如果不允许更改,则没有理由对其进行深度复制。如果允许更改,那么如何提交这些更改,因为被修改的对象不控制这个引用的对象?当然,可以为此设计一种机制,但这无疑意味着克隆对象超出了其职责,并且该程序将成为维护的噩梦。

包含无主对象的深度复制操作也会导致无限(或至少过度)复制操作的问题。假设一个对象是集合的一部分,并进一步假设该对象需要对集合的引用。然后,对该对象的简单深度复制操作将创建集合及其每个成员的新副本。即使假设我们避免了无限递归的问题,并保持这组新对象之间的所有引用一致,对于大多数目的来说仍然是过度的,对于那些需要新集合的情况,这不是更有意义吗?为此目的,深度复制集合本身,而不是其成员之一?

我认为,正如您所建议的那样,仅包含自有对象的深层复制是大多数用途的唯一合理方法。

关于language-agnostic - 深度复制操作是否递归复制它不拥有的子变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3351096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com