在C ++ 11之前,我可以使用它来使类不可复制:
private:
MyClass(const MyClass&);
MyClass& operator=(const MyClass&);
使用C ++ 11,我可以这样做:
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
当使用具有已删除副本和赋值的类时,是否有可能生成默认移动运算符?而且这个类并没有被完全复制,而是移动了(这有点类似)?
那么,我是否必须这样做以防止默认移动构造和assignmnent:
MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;
......?
答案 0 :(得分:20)
正如评论中已经提到的其他人一样,删除的构造函数是在C ++ 11中引入的。要回答您的问题,通常会遵循以下规则:
根据评论中的要求,这里有一些来源(C ++ 11是草案N3242):
答案 1 :(得分:11)
声明复制构造函数时,不会生成移动构造函数/赋值。
所以
MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;
不是必需的。
您仍然可以将其添加为更明确。