问题标签 [move-constructor]

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 回答
548 浏览

c++11 - “没有已知的转换”错误,即使转换运算符被写入

我相信以下应该有效:

X 只有一个单参数构造函数。它需要一个X&&. Converts 对象是临时的,它转换为X&&. 那么为什么我会从 clang-3.3 收到此错误消息:

我能够明确地将运算符称为:

对我来说不幸的是,它适用于ideone,据我所知,它基于 g++ 。目前是否有任何在线clang编译器正在运行?

0 投票
1 回答
863 浏览

c++ - C++11 移动构造函数比 C++98 复制构造函数慢

让我们看一下以下三个类:

我还有一个功能来衡量他们每个人的表现:

我不太明白的是为我的类的每个实例运行此性能测试的结果。我怀疑 IntTab1 应该是最快的,因为它使用移动构造函数和移动赋值运算符,没有例外。事实上,在我的环境中结果是相反的——最快的是 C++98 版本,只使用了复制构造函数和赋值运算符。这是我的结果:

IntTab 的经过时间:2.2873e-05s

IntTab1 的经过时间:2.4139e-05s

IntTab2 的经过时间:2.3554e-05s

有人可以解释这种奇怪的行为吗?

编辑

根据关于错误复制构造函数(不做真正的深拷贝)的评论 - 我有一个测试功能,我假设它测试这种行为:

如果我的复制构造函数不能正常工作,为什么这个函数能正常运行?

0 投票
3 回答
1581 浏览

c++ - Move constructor with memcpy

I have a struct that i want to be non copyable, only movable, but as it contains a lot of POD, writing move constructor would be long and forgetting a variable would be hard to debug. Example:

What would be the problems with this kind of move constructor:

What problems could I face and is this well defined?

0 投票
2 回答
1690 浏览

c++ - C++ 移动语义:为什么调用复制赋值运算符=(&) 而不是移动赋值运算符=(&&)?

我有以下代码:

我希望移动构造函数调用移动赋值运算符。这是该程序的输出:

如您所见,移动赋值运算符已成功调用,但在分配给*this内部移动构造函数时未成功调用。为什么会发生这种情况,我可以以某种方式解决它吗?

0 投票
2 回答
101 浏览

c++ - 使用“new ClassType(std::move(/*class_object*/))”在 freestore 中构造对象

初学者的问题:

由new分配的对象在 free-store 中。*是调用clone()的任何对象,不一定是动态分配的对象。

如果移动对象和移动对象位于不同的内存区域,移动机制如何工作?或者也许他们从来没有真正在不同的领域,我错过了什么?

据我了解,移动构造函数创建了新的开销,这些开销链接到被移动对象的数据/内存部分。数据本身不会移动/更改。在上述情况下这是如何工作的?如果它以相同的方式工作,那么在运行之后,我们不会有一个动态分配的对象位于自由存储之外(无论*位于何处?)这是否由std::move()以某种方式解决?我不完全确定std::move()如何/为什么工作,除了它强制返回对命名对象的右值引用,从而可以从该对象移动。

0 投票
4 回答
980 浏览

c++ - 编译器在移动和复制构造函数之间的选择

最小的例子:

编译:

输入:

输出:

这是 A 行或 C 行的输入/输出。如果我使用 B 行,我会std::move因为一些奇怪的原因而得到。在所有版本中,输出不依赖于我的输入(i 的值除外)。

我的问题:

  • 为什么版本 B 和 C 不同?
  • 为什么编译器会在案例 A 和 C 中进行复制?
0 投票
6 回答
6231 浏览

c++ - 在 C++11 中移出 std priority_queue 的元素

最小的工作示例。

所以这行得通。现在从第 4 行删除注释符号,它说需要复制构造函数(我的被删除了)。此外,它错过了operator=. 问题:

  • 这里有什么区别?
  • 问题可以解决吗?如果是,如何,如果不是,为什么不呢?

注意:您也可以使用 boost 的 priority_queue 作为答案,但我也遇到了同样的错误。

0 投票
1 回答
821 浏览

c++ - 如果在没有移动构造函数的情况下移动对象会发生什么?

如果std::move()在没有定义移动构造函数的用户定义对象上调用会发生什么?是简单的复制吗?

0 投票
1 回答
1017 浏览

c++ - 为什么调用复制构造函数而不是移动构造函数?

考虑以下代码:

当我尝试在 Visual Studio 2012 上编译上述代码时,出现以下错误:

Error 1 error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'

显然,编译器在方法中找到的 push_back 中调用了复制构造函数而不是移动构造函数addOuter。这是编译器错误吗?如果不是,为什么对于这种特定情况,不调用移动构造函数?

0 投票
1 回答
579 浏览

c++ - 为什么不调用移动构造函数?

我正在做C++ Primer 5th Edition的练习,就像:

练习 13.50:将 print 语句放入 String类的移动操作中,然后重新运行第 13.6.1 节(第 534 页)中练习 13.48 中的程序,该程序使用向量查看何时避免复制。(第 544 页)

String是一个练习类,其行为类似于std::string不使用任何模板。String.h文件:

默认、复制和移动构造函数的实现String.cpp

Main.cpp

输出:

可以看出,根本没有调用移动构造函数。为什么向量分配更多内存时不调用移动构造函数?

更新:

编译器信息:

main.cpp具有打印能力及其输出:

输出: