问题标签 [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 投票
4 回答
165 浏览

python - 无法理解浅拷贝

我知道要制作浅拷贝,我们可以使用切片,并且还有一个拷贝模块。但是为什么写入“b”的索引会改变id。

0 投票
1 回答
924 浏览

java - 泛型的浅拷贝

我想编写一个通用类,它是具有基本推送和弹出操作的先进先出队列,这里是类:

问题出在这里的 elem 构造函数中:

我不想将 v 分配给 val 但我想克隆它(浅拷贝)。
这是我尝试过的事情:
1-克隆方法:因为它在 Object 类中受到保护,所以我无法从 E 变量访问它。

2- queue<E extends Cloneable> : 没有解决问题,实际上 Cloneable 是一个空接口,它没有添加任何方法。

3-使用优先队列:这可能比自己编写队列类更容易,但我不想要优先级,只想要 Fifo 结构。

4-实现队列接口:其中你必须实现许多我不需要的方法,而且我仍然需要自己克隆。

那么,接下来要尝试什么?

0 投票
2 回答
7886 浏览

java - create a list from another list and remove elements from copied list

Suppose I have following structure and I created a list like this. If I do temp.remove(0) it won't affect on the original list but temp.get(0).vars.remove(0) will remove elements from the original list too.

I think new ArrayList(top.mids) is not doing a deep copy then how come temp.remove(0) doesn't affect on the original list?

0 投票
1 回答
136 浏览

c# - 如何“通过引用”创建值类型的实例

考虑代码和输出:

但是,我希望 otherColor 通过引用携带相同的值,这样输出将变为

如果可能的话,我怎么能做到这一点?

0 投票
3 回答
194 浏览

java - 数组的 clone() 和 system.arracopy() 在 Java 中创建两个具有不同引用的数组?

首先,我不得不说这不是deep copying vs shallow copying (clone)Java 中的副本。但它与此有关。我已经阅读deep vs shallow copying了 SO 中的其他帖子,在处理这个问题时,我发现我的理解存在一些问题。问题是:clone() and system.arraycopy()在下面的示例中给出不同的数组。但他们不应该这样做?

我在下面的另一个示例对象中使用数组作为字段。我再次看到它们是数组字段的不同引用。代码被注释以便于理解。

0 投票
2 回答
5318 浏览

c# - 如何创建 IEnumerable 的浅表副本?

我有一个 IEnumerable 对象:

其中包含三个项目。现在我创建了一个新对象并想从 listSelectedItems 中获取所有项目,所以我编写了以下代码:

但是现在当我更改 newList 时,listSelectedItems 也会被更改。如何在没有参考的情况下更改或创建新的 IEnumerable。

0 投票
1 回答
1798 浏览

c++ - 浅拷贝指针时,默认的赋值运算符是否会造成内存泄漏?

我是这个网站的新手,也是编程世界的新手。所以,请耐心等待我:)

我阅读了三法则,并且了解了 Copy Constructor 和 Assignment 运算符的工作原理。所以我明白,由 C++ 提供的默认值提供对象的浅拷贝(或成员方式)。

我的问题是......如果类有一个成员指针(指向动态分配的内存),默认的赋值运算符,只会将指针中保存的地址从原始对象复制到被分配对象的指针. 但这不会造成内存泄漏吗?例如以下代码:

因此,在这段代码中,当 gc1 被创建时,gc1.toolHolder 保存了一些由 5 个字符串组成的动态分配内存的地址。假设地址为 125。在此之后,创建 gc2 并为 5 个字符串动态分配内存,假设 gc2.toolHolder 保存地址 135。

下一行代码调用默认赋值运算符,并提供从 gc1 到 gc2 的每个成员的浅拷贝。这意味着现在指针 gc2.toolHolder 也持有地址 125,我们不能再访问地址 135 处的内存。所以在这种情况下,默认赋值运算符会造成内存泄漏?……还是我理解错了??

另外,另一个问题,在默认复制构造函数的情况下,因为它只在不存在的对象上调用,这意味着 gc3.toolHolder 将没有机会分配新内存,比方说,在地址145?它只会接收存储在 gc1.toolHolder 中的地址吗?

更具体地说...我要问的是它是否与上面的情况相同,除了我们只有两个指针 gc3.toolHolder 和 gc1.toolHolder,引用相同的地址 125,没有 gc3.toolHolder 动态分配新5个字符串的记忆。

长话短说,当我们实例化一个具有指向动态分配内存的指针成员变量的类时,默认赋值运算符会导致内存泄漏吗?和默认的复制构造函数共享指向相同分配内存的指针?

感谢您的时间!

0 投票
1 回答
1856 浏览

c++ - C++ 悬空指针/深拷贝/浅拷贝混淆

我听说当我们将相同的地址分配给两个不同的指针时会出现悬空指针问题。这是由于两个指针都指向相同的内存位置,并且如果使用一个指针中的地址释放内存;它仍然可以从第二个指针访问(甚至可以从第一个指针访问,如果未设置为 null,我不讨论这种情况)。

在下面的代码中,我尝试了不同的场景,在这些场景中应该将相同的内存位置分配给不同的指针,但显然在每个场景中它都在分配新的内存。为什么会这样?在每种情况下,都会创建深层副本。

我还尝试了很多初始化指针的方案。但在每种情况下,它们似乎都有单独的内存地址,并且相应的数据成员也有不同的内存地址。

那么在这种情况下会出现悬空指针问题吗?或者我怎样才能在这里做一个浅拷贝?这个 c++ 标准/版本(写在下面)是这样的还是我错过了什么?

操作系统:Linux mint 15

g++ --version的输出:

0 投票
2 回答
591 浏览

c++ - const 指针浅拷贝

是否可以复制

但只是作为一个浅拷贝?我需要对它进行排序并写回它,我也想要在数组 1 中进行更改

编辑:我很愚蠢,我忽略了 array1 的 ** 那么这是有道理的。

0 投票
2 回答
21400 浏览

c++ - 表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误

此错误发生在运行时,我不确定是什么原因造成的 - 代码对我来说看起来是正确的。

错误显然发生在第 52 行(print() 函数的第一行)。除此之外,打印的文本显示的数字非常大且通常为负数。这是什么原因造成的?