问题标签 [deep-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
1579 浏览

c++ - 创建一个易于维护的复制构造函数

考虑以下类:

请注意,我必须定义一个复制构造函数才能对“p”进行深层复制。这有两个问题:

  1. 大多数字段应该简单地复制。一个一个地复制它们是丑陋的并且容易出错。

  2. 更重要的是,每当向类添加新属性时,都需要更新复制构造函数,这会造成维护的噩梦。

我个人想做类似的事情:

所以先调用默认的拷贝构造函数,然后再进行深拷贝。
不幸的是,这似乎不起作用。

有没有更好的方法来做到这一点?一个限制 - 我不能使用共享/智能指针。


Sbi 的建议很有道理。我想我会创建包装类来处理资源。我不想使用 shared_ptr 因为 boost 库可能并非在所有平台上都可用(至少在标准发行版中不可用,OpenSolaris 就是一个例子)。

我仍然认为,如果你能以某种方式让编译器为你创建默认的构造函数/赋值运算符,并且你可以在它之上添加你的功能,那将会很棒。我认为手动创建的复制构造函数/赋值运算符函数创建起来很麻烦,维护起来也是一场噩梦。所以我个人的经验法则是不惜一切代价避免自定义复制构造函数/赋值运算符。

感谢大家的回复和有用的信息,并对我的问题中的拼写错误感到抱歉。我是用手机打字的。

0 投票
2 回答
1160 浏览

python - 深拷贝有问题吗?

资源

输出

问题

为什么会这样输出?我以为我在修改之前克隆了错误列表,并且它们不应该都引用同一个列表?

0 投票
2 回答
1908 浏览

c# - 如何做 NHibernate 对象的深拷贝?

我正在尝试对 NHibernate 对象(代理包装器)进行深层复制。除了父对象的每个内部对象之外,我还想做一个延迟加载的东西的副本Id,因为它应该在我保存作为深度复制结果的新对象时生成。

我尝试过使用序列化,也尝试过使用 AutoMapper(我知道,它不是为了这个,只是试了一下)。两者都没有产生我想要的。

如果没有更好的方法,我正在考虑手动复制每个属性作为最后一个选项。

我找到了这个问题,但考虑到我不愿意手动复制,它并没有解决我想要的问题。

0 投票
2 回答
5645 浏览

java - Deep Copy [] 和 ArrayList Java

我想制作一些 Object[] 和 ArrayList 的深层副本我该怎么做(不循环,并调用克隆)

没有标准的实用程序可以做到这一点?

谢谢若昂

0 投票
1 回答
1258 浏览

vb.net - 简单问题 - 浅拷贝 (VB.Net)

好吧,我总是对此感到困惑。

假设我有这个代码。

这意味着引用“Foo”或存储在“listOfFoo”中的项目将引用同一个对象,对吧?如果我要更改 'foo' 的属性 - 但不将其更改为新对象 - 两者仍然会引用并反映更新的值?

0 投票
4 回答
2239 浏览

language-agnostic - 复制构造函数/操作符/函数是否需要明确它实现的复制变体?

昨天我问了一个关于在 C# 中复制对象的问题,大多数答案都集中在深复制浅复制之间的区别上,以及应该明确给定的复制构造函数(或运算符或函数)这两种复制变体中的哪一个实现。我觉得这很奇怪。

我用 C++ 编写了很多软件,这是一种严重依赖复制的语言,而且我从来不需要多个复制变体。我曾经使用过的唯一一种复制操作是我称之为“足够深的复制”的操作。它执行以下操作:

  • 如果对象拥有成员变量的所有权(参见composition),它会被递归复制。
  • 如果对象对成员变量没有所有权(参见聚合),则仅复制链接。

现在,我的问题有三个:

  • 1) 一个对象是否需要多个副本变体?
  • 2)复制功能是否需要明确它实现的复制变体?
  • 3)顺便说一句,我所说的“足够深的副本”是否有更好的术语?我问了一个有关“深拷贝”一词定义的相关问题
0 投票
2 回答
320 浏览

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

给定一个对象,它有一个它不拥有的变量;也就是说,变量是通过聚合而不是组合来组合的。深度复制操作会复制变量还是仅复制指向它的链接?

0 投票
6 回答
35082 浏览

java - Java的ByteBuffer的深拷贝duplicate()

java.nio.ByteBuffer#duplicate()返回一个共享旧缓冲区内容的新字节缓冲区。对旧缓冲区内容的更改将在新缓冲区中可见,反之亦然。如果我想要字节缓冲区的深层副本怎么办?

0 投票
1 回答
4542 浏览

php - 教义记录的深拷贝

我想在 symfony 项目中制作一个教义记录的深拷贝/克隆。现有的 copy($deep) 方法不能与 $deep=true 一起正常工作。

举个例子,让我们看一个课堂课程。这节课有一个开始和结束日期,它们之间有几个休息时间。这间教室在一栋楼里。

课间休息是一对多的关系,因此一堂课内可能有很多休息时间。课程建设是多对一的关系,因此课程只能在 ONE Building 中。

如果我想复制房间,也应该复制休息时间。建筑物应该保持不变(这里没有副本)。

我在网上找到了一些示例,它们创建了一个从 sfDoctrineRecord 扩展并覆盖复制方法的 PHP 类。

我尝试的是:

现在这会导致失败:Doctrine_Connection_Mysql_Exception: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-1' for key 'PRIMARY'

所以我需要将新记录($ret)的 id 设为“null”,因为这应该是一条新记录。我可以/应该在哪里以及如何做?

更新:使用以下代码修复了错误:

但效果不好。在 DoctrineCollection 课程->Breaks 中,所有新的中断都可以。但它们没有保存在数据库中。我想复制一堂课并增加 7 天的时间:

如您所见,中断已保存,但似乎它们不在数据库中。

0 投票
1 回答
2649 浏览

python - 自定义类实例复制

我是编程和 Python 的新手。我遇到的问题是删除作为自定义类实例的列表元素。

这将返回: ValueError: list.remove(x): x not in list

有没有一种简单的方法可以通过使用深度复制列表中的引用从列表中删除元素?

编辑:感谢您的回答。我找到了一些使用索引的解决方案。它不漂亮,但它可以完成工作: