显式默认的移动构造函数
Explicitly defaulted move constructor
根据 c++11 标准,只有在以下情况下才会生成默认移动构造函数:
- X 没有用户声明的复制构造函数,并且
- X 没有用户声明的复制赋值运算符,
- X 没有用户声明的移动分配运算符,
- X 没有用户声明的析构函数,并且
- 移动构造函数不会隐式定义为已删除。
我还能显式默认它吗?似乎在叮当声中正常工作。例如,像这样:
class MyClass {
private:
std::vector<int> ints;
public:
MyClass(MyClass const& other) : ints(other.ints) {}
MyClass(MyClass&& other) = default;
};
该规则的动机是,如果默认复制构造函数不适用于您的类,那么默认的移动构造函数也可能不起作用(5 规则,或我们在 C++11 中所做的任何内容)。所以是的,你可以明确地默认它,以你作为程序员的荣誉,它会工作。
在示例代码中,您可以改为删除复制构造函数,因为它与默认值相同。
是的,您始终可以为可以使用 = default
自动生成的函数显式调用默认生成。这就是语法的用途。
相关文章:
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- std::vector::p ush_back() 不会在 MSVC 上编译具有已删除移动构造函数的对象
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么调用复制构造函数而不是移动构造函数?
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 移动构造函数和右值引用
- 为什么 std::memmove 中联合的默认非平凡移动构造函数C++?
- 具有专用化的模板类中的可靠条件复制和移动构造函数
- C++:为什么不调用移动构造函数?
- 移动构造函数永远不会被调用
- C++:关于使用 Stroustrup 示例移动构造函数/赋值的问题
- 运算符+ 的规范实现涉及额外的移动构造函数
- C ++为什么在移动构造函数中需要移动/前进
- 为什么在删除"移动构造函数"时使用"复制构造函数"?
- 为什么这里不调用移动构造函数?
- 隐式移动构造函数
- 如何为具有私有成员的派生类实现移动构造函数
- 为什么不调用移动构造函数
- 是否可以避免在以下代码中复制/移动构造函数的需要?