问题标签 [shallow-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 投票
1 回答
133 浏览

stl - stl 库在复制指针时是否使用 malloc?

我有一个关于在 stl 库中复制指针的问题。说我定义:

struct A{ int x; }

std::map<int, const A*> map1;

然后,我使用堆中的内存填充 map1,使用 malloc 作为指向 A 的指针。

然后我做

std::map<int, const A*> map2 = map1;

对于 map2 中结构 A 的每个指针,std::map 是对指针进行浅拷贝,还是从堆中为每个指针分配新内存?

干杯

尚克

0 投票
2 回答
146 浏览

c++ - 具有堆对象和破坏冲突的数据类型的浅拷贝

我有以下数据类型:

实现了访问者设计模式以对A.

当我想处理的子集b_elements并将访问者专门应用于这些元素时,问题就开始了。

一种解决方案是创建另一个对象,Ab_elements指向原始对象中的所需元素,并在新创建的对象上调用访问者。但是(如您所料)问题是当新对象被销毁时,析构函数将删除那些会影响原始对象的引用作为副作用。

提示:我无法从原始对象创建所需的副本,b_elements因为它太昂贵了。

我的问题是,这是一种常见的模式吗?避免此类问题的最佳做法是什么?

0 投票
8 回答
2924 浏览

c++ - 如何在 C++ 中同时使用默认和自定义复制构造函数?

我有一堂很长的课,里面有很多数据成员。我想为它写一个复制构造函数。但是,如果我编写自己的复制构造函数,我将无法访问默认的复制构造函数。

我只想在我自己的复制构造函数中修复一些指针。所以我想要一个对象的浅拷贝,这可以通过默认的拷贝构造函数来完成。

当我有自己的复制构造函数时,是否有可能访问默认的复制构造函数?

0 投票
3 回答
1604 浏览

git - git浅克隆连同分支

我必须处理一个包含一些二进制文件的 git repo。

如果有人能向我解释这一点,我将不胜感激

也就是说,为什么在传递-b时似乎正在改变--depth的行为?

0 投票
1 回答
324 浏览

c# - 浅拷贝值类型数组的一段

我正在尝试将 double[] 浅复制到段中,并将这些段传递给新线程,如下所示:

让创建的段引用原始数组的最佳方法是什么?

0 投票
4 回答
8020 浏览

java - 数组的浅拷贝,为什么不能简单地做 newArr = oldArr?

假设我有一个整数数组,“orig”

我想浅拷贝它,所以我不能这样做:

我的教授说,对于原语,浅拷贝和深拷贝本质上是相同的,因为我们必须复制数组的每个索引。但是设置整个数组等于另一个数组做同样的事情,对吧?

我对对象数组有类似的问题

这是我的意识形态

但有人告诉我,我必须复制每个数组索引,比如

对于浅拷贝,将数组与另一个数组相等并单独复制每个数组索引之间真的有什么区别吗?(我知道深度意味着您必须创建全新的对象)

0 投票
2 回答
97 浏览

python - 具有浅连接的 Python 类实例的问题

我正在尝试用 Python 编写遗传算法框架,并且遇到了浅/深复制的问题。我的背景主要是 C/C++,我很难理解这些联系是如何持续存在的。

我看到的是子类中属性列表长度的爆炸式增长。我的代码在下面...我会指出问题。

这是单个基因的类别。本质上,它应该有一个名称、值和布尔标志。在我的班级中Gene填充一个列表的实例。Individual

这是我的Individual课。每一代,都会创建一个种群(我将在类声明之后显示创建代码)并应用典型的遗传算法操作。值得注意的是print len(self.Genes_)调用,每次实例化此类时都会增长。

正如你所看到的,每个个体应该有 24 个基因,但是这个群体爆炸得非常快。我创建了一个新个体的初始群体,如下所示:

后来在我的主循环中(为整个转储道歉,但觉得有必要 - 如果需要我的二次调用(突变/交叉),请告诉我))

0 投票
3 回答
67 浏览

c++ - 如何实现两个类来自动决定深拷贝和浅拷贝?

我有以下设计问题:
我有Resource两种访问器:

  • 一种是修改它(我们称之为Access
  • 一个是用于类似 const 的访问(我们称之为Const_access),但你可以说 c1=c2 然后 c1 将访问 c2。

鉴于这Resource很大,我必须实现以下复制机制:

我的目标是编写Access以便Const_access能够准确const使用Access. 我目前的实现有缺陷,使用:

但这里Const_access ca; ca.Access::method()仍然有效,我必须手动隐藏非常量访问器。我已经尝试过受保护或私有继承,但这也限制Access&了处理的灵活性Const_Access&

这个问题的正确解决方案是什么?

0 投票
3 回答
192 浏览

c++ - 我可以为 const 和非常量实例编写不同的 copyCtor 吗?

我有以下问题:

我有一堂课应该这样做:

我怎样才能在没有继承的情况下最好地做到这一点?(我的意思是我会Const_obj从其他地方继承Obj。)

编辑:

直接使用o.clone()不是一种选择,因为这样我很容易通过意外克隆来引入错误。

编辑:

最后,使用Scott Meyers的 Effective C++ 中的思想,有一个适当的、完整的解决方案,其中包含惰性求值。在下面查看我的答案。

0 投票
3 回答
122 浏览

ruby - 当 hash 是一维和二维时,dup 给出不同的结果

dup是浅拷贝,所以这样做时:

现在hh_copy一样:{:one=>{:a=>"a", :b=>"new b"}} 是的,没错。

但是什么时候h是一维哈希:

为什么?