move构造函数是自动生成的
Are move constructors produced automatically?
我有一个大的类,里面有很多STL容器。
编译器会自动创建一个move构造函数,将这些容器移动到目标位置,还是我必须自己创建?
类X的move构造函数被隐式声明为默认值,正好在
- X没有用户声明的复制构造函数,
- X没有用户声明的拷贝赋值操作符
- X没有用户声明的移动赋值操作符,
- X没有用户声明的析构函数,并且
- move构造函数不会被隐式定义为删除。
例如,如果你的类有一个没有移动构造函数的类类型数据成员,即使它没有声明任何复制/移动构造函数,你的类也不会得到移动构造函数,因为隐式声明的移动构造函数将被定义为删除(因为那个数据成员)。
默认移动构造函数通常与默认复制构造函数绑定。得到一个就得到另一个。但是,如果编写复制构造函数/赋值操作符,则不会编写默认的复制和移动构造函数/赋值操作符。
相关文章:
- 我可以说服自动生成的构造函数将我的 POD 类成员归零吗?
- 删除了所有自动生成的构造函数/运算符的类仍然可以从函数返回吗
- Visual Studio在创建类时不再生成构造函数/解构器
- c++ 17 中结构自动定义构造函数的规则是什么?
- C++自动生成的具有常量和非常量引用的复制构造函数
- 移动构造函数是自动生成的,即使成员没有移动构造函数?
- 如何避免丢失自动生成的初始化列表构造函数
- 为什么 c++ 实例在通过 Objective-c 类调用时会自动调用构造函数和析构函数?
- 如果我默认复制构造函数,将生成构造函数和移动分配
- 自动生成的移动构造函数导致非法行为
- 自动生成移动构造函数
- 为什么在以下情况下,c++会生成构造函数
- 自动移动构造函数
- C++自动生成带有用户声明析构函数的移动构造函数
- 需要c++默认构造函数,而不是已经用参数生成构造函数
- 在c++ 11中,当类没有任何构造函数时,自动生成类成员函数
- move构造函数是自动生成的
- 编译器自动确定构造函数初始化列表
- 自动生成带有不可移动成员的移动构造函数
- 编译器生成构造函数来初始化成员