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

c++ - 移动构造函数调用基类移动构造函数

我有一个基类,它基本上包含将一个类附加到任意窗口句柄(例如,HWND、HFONT),并使用一个策略类来附加/分离和销毁:

请注意,我已将复制构造函数声明为私有(没有实现),因为我不希望复制该类,但允许移动。

我的Window课程源于此:

再一次,复制默认/复制ctors。移动构造函数的实现是:

但是,在编译期间,我在移动构造函数实现的第一行收到以下错误:

因此,它看起来好像是在尝试调用复制构造函数(我已将其声明为私有)而不是移动构造函数。我在这里缺少一些简单的东西吗?

提前致谢。

编辑:修改 mtor 所以它是非常量的,错误仍然存​​在。EDIT2:我正在使用 Visual C++ 2010。

0 投票
1 回答
127 浏览

c++ - 为 fstream 实现移动的 C++0x 库

在找到如何返回 fstream (C++0x)的答案后,我现在想知道是否有一个当前的 c++0x 库为 fstreams 实现移动(甚至交换)(因为gcc (27.9)没有) . 如果它也是免费的,我会更喜欢。

或者有没有其他方法从函数按值返回 fstreams?

我已经尝试编译libcxx,但它似乎非常特定于 linux/mac,我还需要它在 Solaris 上运行,它不会编译。

我可以解决这个问题(例如通过引用返回),但我想我会问这个,以防万一有一个不涉及修改调用代码的解决方案。

0 投票
3 回答
39039 浏览

c++ - 自动生成默认/复制/移动 ctor 和复制/移动赋值运算符的条件?

我想在编译器通常自动生成默认构造函数、复制构造函数和赋值运算符的条件下刷新我的记忆。

我记得有一些规则,但我不记得了,也找不到网上有信誉的资源。任何人都可以帮忙吗?

0 投票
4 回答
1304 浏览

c++11 - 移动构造函数不会隐式地对成员变量起作用?

为什么 this: (vs2010) 不在类中移动向量?

这是否意味着每个使用 std::vector 的类(和其他可移动类)都应该有一个显式的移动构造函数和赋值?

0 投票
5 回答
10745 浏览

c++11 - 移动构造函数和 const 成员变量

我喜欢 const 成员变量的想法,尤其是当我将 C 函数包装到类中时。构造函数采用在整个对象生命周期内保持有效的资源句柄(例如文件描述符),而析构函数最终将其关闭。(这就是 RAII 背后的想法,对吧?)

但是使用 C++0x 移动构造函数我遇到了问题。由于在“卸载”对象上也调用了析构函数,因此我需要防止清理资源句柄。由于成员变量是 const 我无法分配值 -1 或 INVALID_HANDLE (或等效值)来指示析构函数它不应该做任何事情。

如果一个对象的状态被移动到另一个对象,有没有办法不调用析构函数?

例子:

0 投票
3 回答
823 浏览

c++ - 在移动构造函数中窃取

在一个玩具类的移动构造函数的实现过程中,我注意到了一个模式:

模式显然是:

所以我写了一个预处理器宏来让窃取变得不那么冗长和容易出错:

现在实现如下所示:

这有什么缺点吗?是否有不需要预处理器的更清洁的解决方案?

0 投票
3 回答
6066 浏览

c++ - 在 C++0x 中传递/移动构造函数的参数

如果我有一个带有 n 个参数的构造函数,那么任何参数都可以是右值和左值。是否可以通过右值的移动语义来支持这一点,而无需为每个可能的右值/左值组合编写 2^n 构造函数?

0 投票
5 回答
5646 浏览

c++ - Explicit move constructor?

The explicit keyword is recommended for all most constructors which can be called with one argument, except for copy constructors.

For copy constructors, it has an use (to forbid implicit copying via function call, return, etc), but it's not what's usually wanted.

What about move constructors? Is there any reasonable use case to make them explicit? What's the good practice here?

0 投票
1 回答
531 浏览

c++ - std::move 实现

我从微软那里得到了下一个片段

...

我得到一个错误“错误C2440:'return':无法从'remote_integer'转换为'remote_integer &&'”

编译器发生了什么变化?使用 std::move 一切顺利。

0 投票
2 回答
744 浏览

c++ - 当我初始化 C++ 容器(例如 std::list)时,是否调用了复制构造函数?

当我初始化一个 STL 容器时,例如list< vector<char> >使用例如my_list.push_back(vector<char>(5000, 'T')),这是在构造后复制的吗?还是编译器会调用list< vector<char> >自己内部的构造函数?