问题标签 [copy-assignment]

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 投票
5 回答
5952 浏览

c++ - 为什么 operator = 返回 *this?

说我想覆盖,operator =所以我可以做类似的事情

然后在我的实现中operator =,我有这样的事情:

不要介意实施,它已经可以正常工作了。

我担心的是,当你发生了什么return *this?我知道它返回对对象的引用,但这是怎么回事?

0 投票
1 回答
179 浏览

c++ - C++ 复制构造函数

我试图很好地掌握复制构造函数,并且我发现了这部分代码。

但是,我不明白为什么会得到这些结果。特别是,为什么调用 A1 和 A 复制构造函数而不是构造函数,并且在调用 volta 函数时我根本没有得到(结果由 **** 括起来):

EDIT_AssignmentOperatorQuery :如果我在 BigA 中添加这个函数

并从 main 调用它:biga.change();为什么不调用默认赋值运算符,而是调用复制构造函数和构造函数,我得到了

EDIT_AnsweringMyOwnQuery :我刚刚发现这是复制构造函数的初始化,而不是赋值运算符的赋值。

0 投票
1 回答
182 浏览

c++ - Google 测试框架中的可复制模拟

是否可以在Google 测试框架中制作可复制的模拟类?我已经看到,一旦使用宏,就会删除默认的复制构造函数复制赋值运算符。MOCK_METHOD有没有办法解决这个问题?

0 投票
1 回答
97 浏览

c++ - 临时左值是 std::move 的用例吗

我有一个class这样的:

我可以这样使用:

如果我得出不再需要的结论a,我可以致电:


但是现在如果我A只需要一个对象来构建widget呢?我会这样做吗:

或者

0 投票
1 回答
36 浏览

c++ - 仅定义重要的复制操作

我有一个模板类,它有很多成员变量。这些变量中有少数具有类的模板类型,大多数具有固定类型。

我想通过转换在类的一个实例之间复制到另一个实例,但如果类不具有相同的类型,则不能使用隐式复制来执行此操作。因此,我需要一个分配方法。

但是,为了进行我想要的转换而不得不写出所有这些复制操作,这感觉很不幸。

因此,有没有办法设置赋值运算符,以便在可能的情况下完成隐式复制?

示例代码如下:

0 投票
2 回答
785 浏览

c++ - 为非类型模板结构的成员结构重载复制赋值运算符

我有以下非类型模板:

如果我现在声明两个不同的路径,我不能将不同段的元素相互分配,因为结构可能具有相同的结构,但类型不同:

当然,如果我将点和路径的定义分开,则分配将起作用:

但这不是我想要的(这只是一个 MWE),所以我想知道如何重载复制赋值运算符以使其工作。我尝试了许多变体,例如:

但我总是遇到同样的错误。所以我的问题是:是否可以重载 = 以允许在不改变结构布局的情况下分配以下形式?

0 投票
0 回答
214 浏览

c++ - 自定义向量中的复制分配

我正在研究基于自定义字符串类(String)的自定义向量(String_vector)。我的副本分配有问题,我认为我处于某种不会终止的循环中。在我的实现return *this中,如图所示,我其中实现了复制和交换方法。

字符串类:

String_vector 类:

主要:

谢谢!

0 投票
2 回答
386 浏览

c++ - 是否建议使用具有复制和交换习语和自分配检查的复制分配运算符?

在这里,您可以看到带有自赋值检查的复制赋值运算符实现:

这对自我分配有好处,但对性能不利:

  1. 就像每次检查 if 语句时一样(考虑到分支预测,我不知道它会优化多少)
  2. 我们也在这里丢失了右值参数的复制省略

所以我仍然不明白我是否会实施std::vector'operator=我将如何实施它。

0 投票
3 回答
2765 浏览

c++ - 编译器不会使用复制分配而不是移动?

我有一个类,其中移动分配被显式删除,因为该对象不应该是可移动的。但是如果我使用 RVO 分配给这个类的一个实例,编译器会给我错误:

编译器也提到了现有的复制赋值运算符,但没有使用它。

这是我的代码(或此处的(未)运行示例

我在这里找到了一个非常相似的帖子。

我知道我可以通过使用临时来避免这种情况。我想知道为什么每个编译器(我用 gcc、clang 和 vs2013 测试过)都不能直接调用现有的复制分配?有什么我想念的吗?

0 投票
3 回答
321 浏览

c++ - 为什么在复制赋值之前调用复制构造函数?

当 LL1 = LL2 被执行时,应该调用哪一个。

我希望复制分配会发生。但是代码是按以下顺序执行的

  1. 复制构造函数
  2. 复制分配
  3. 析构函数

我究竟做错了什么 ?为什么要调用析构函数?