C++ 编译器生成函数的规则
对于构造函数、析构函数、拷贝构造函数和拷贝赋值运算符,编译器永远会在未声明的情况下生成它们各自的默认版本,是否声明其中一者对另一者的生成无影响,各自具有独立性。
移动构造函数在以下条件皆满足时生成:
- 不存在用户声明的拷贝构造函数
- 不存在用户声明的拷贝赋值运算符
- 不存在用户声明的析构函数
- 不存在用户声明的移动赋值运算符
移动赋值运算符在以下条件皆满足时生成:
- 不存在用户声明的拷贝构造函数
- 不存在用户声明的拷贝赋值运算符
- 不存在用户声明的析构函数
- 不存在用户声明的移动构造函数