move-constructor相关内容

自动生成默认/复制/移动构造函数和复制/移动赋值运算符的条件?

我想刷新我对编译器通常自动生成默认构造函数、复制构造函数和赋值运算符的条件的记忆. 我记得有一些规则,但我不记得了,而且在网上也找不到信誉良好的资源.有人可以帮忙吗? 解决方案 在下文中,“自动生成"的意思是“隐式声明为默认值,但未定义为已删除".有些情况下,特殊成员函数被声明,但被定义为删除. 如果没有用户声明的构造函数(第 12.1/5 节),则会自动生成默认构造函数. ..

显式move构造函数

尝试编译以下代码: struct Foo { 显式Foo(void) {} 明确的Foo(Foo&&rhs){} }; Foo bar(void) { return Foo(); } 出现以下错误: 调用隐式删除的'Foo'复制构造函数 这很明显 问题1:为什么编译器需要的copy-ctor? ?我期望 ..
发布时间:2020-09-27 21:10:23 C/C++开发

移动构造函数和const成员变量

我喜欢const成员变量的概念,尤其是当我将C函数包装到类中时。构造函数采用资源句柄(例如文件描述符),该句柄在整个对象生命周期内保持有效,而析构函数最后将其关闭。 (那是RAII背后的想法,对吗?) 但是使用C ++ 0x move构造函数时,我遇到了问题。由于析构函数也在“卸载”对象上调用,因此我需要防止清理资源句柄。由于成员变量是const,因此我无法分配值-1或INVALID_HAN ..
发布时间:2020-09-27 18:50:19 其他开发

移动构造函数未按预期方式被调用

我是C ++ 0x的新手,我想把我的头放在右值引用周围,并移动构造函数。我正在使用带有-std = c ++ 0x的g ++ 4.4.6,并且对以下代码感到困惑: class Foo { public: Foo() :p(new int(0)) { printf(“ default ctor\n”); } Foo(int i) :p(new int(i)) ..
发布时间:2020-09-27 07:11:40 C/C++开发

移动构造函数和继承

我试图理解在C ++ 11中移动构造函数和赋值操作的方式,但是在将其委托给父类时遇到了问题。 代码: class T0 { public: T0(){puts(“ ctor 0“); } 〜T0(){puts(“ dtor 0”); } T0(T0 const&){puts(“ copy 0”); } T0(T0&){puts(“ move 0”); } T0& ..
发布时间:2020-09-27 07:05:46 C/C++开发

了解`std :: is_move_constructible`

没有移动构造函数但具有接受 const T& 参数的副本构造函数的类型,请满足 std :: is_move_constructible 。例如,在以下代码中: #include struct T { T(const T&){} // T(T&&)= delete; }; int main(){ static_assert(std :: ..
发布时间:2020-09-27 01:16:40 C/C++开发

移动构造函数何时被调用?

我对何时调用move构造函数与copy构造函数感到困惑。 我已经阅读以下来源: 在C ++ 11中移动语义和右值引用 msdn 所有这些来源要么过于复杂(我只想举一个简单的例子),要么仅显示如何编写move构造函数,而不是如何调用它。我已经写了一个更具体的简单问题: const class noConstruct {} NoConstruct; class a ..
发布时间:2020-09-26 22:47:31 C/C++开发