在定义类时,如果我们忘记编写Move构造函数和Move赋值运算符,编译器就足够聪明,可以自动优化和添加。
答案 0 :(得分:3)
也许,也许不是。这不是编译器是否足够智能,而是您记住或忘记定义的其他特殊成员函数的问题。 §12.8/ 9 [class.copy]
中列出了编译器隐式定义移动构造函数的确切条件如果类
X
的定义没有明确声明一个移动构造函数,那么当且仅当有一个构造函数时,它将被隐式声明为默认值 -X
没有用户声明的复制构造函数,
-X
没有用户声明的副本赋值运算符,
-X
没有用户声明的移动赋值运算符,以及
-X
没有用户声明的析构函数。
类似地,隐式生成移动赋值运算符的条件列在§12.8/ 20
下如果类
X
的定义没有明确声明一个移动赋值运算符,那么当且仅当有一个时,将隐式声明一个默认值 -X
没有用户声明的复制构造函数,
-X
没有用户声明的移动构造函数,
-X
没有用户声明的复制赋值运算符,以及
-X
没有用户声明的析构函数。