删除复制构造函数是否也会删除默认的复制/移动运算符?

时间:2018-05-26 21:58:47

标签: c++ c++11 copy

我有一个课程,我不打算复制/移动,并希望确保我不会意外地这样做。

class Foo {
public:
  Foo(const Foo&) = delete;

  // Are these 3 needed?
  Foo(Foo&) = delete;
  Foo& operator=(const Foo&) = delete;
  Foo& operator=(Foo&&) = delete;
}

是否还有删除移动构造函数和/或移动/复制赋值运算符的目的,还是删除复制构造函数会自动告诉编译器不生成它们?

1 个答案:

答案 0 :(得分:3)

查看lists on when such个功能是否被隐式删除。所以对你的问题的简短回答,不重复纪录片中写的内容:

  

是否还有删除移动构造函数和/或移动/复制赋值运算符的目的?

是的,当然有。即使它只是以冗余方式强调强调不允许特定操作,也可能使代码的界面更具表现力。