Make a class non-copyable *and* non-movable

我只是一个虾纸丫 提交于 2019-12-03 10:55:17
mcserep

As others already mentioned in the comments, deleted constructors was introduced in C++11. To answer your question, the following rules hold in general:

  1. The two copy operations are independent. Declaring copy constructor does not prevent compiler to generate copy assignment and vice versa. (Same as in C++98)
  2. Move operations are not independent. Declaring either one of them prevents the compiler to generate the other. (Different from copy operations.)
  3. If any of the copy operations is declared, then none of the move operation will be generated. (Your case.)
  4. If any of the move operation is declared, then none of the copy operation will be generated. This is the opposite rule of the previous.
  5. If a destructor is declared, then none of the move operation will be generated. Copy operations are still generated for reverse compatibility with C++98.
  6. Default constructor generated only when no constructor is declared. (Same as in C++98)

As requested in the comments, here are some sources (C++11 is draft N3242):

  • Copy operations: § 12.8.8, § 12.8.19
  • Move operations: § 12.8.10, § 12.8.21
  • Default constructor: § 12.1.5
Jarod42

Move constructor/assignment are not generated when you declare a copy constructor.

So

MyClass(MyClass&&) = delete;
MyClass& operator=(MyClass&&) = delete;

are not required.

You can still add it to be more explicit.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!