C++中六个特殊成员函数的关系
C++11之后的版本每个类有六个特殊的成员函数,之所以特殊是因为它们可以在各种情况下由编译器自动提供;
默认构造函数、复制构造函数、复制赋值运算符、析构函数、移动构造函数、移动赋值运算符
关系规则:
1、如果显式声明了任何构造函数,那么编译器不再自动提供默认构造函数;
2、如果显式声明了默认构造函数,编译器仍将自动提供其他五种特殊成员函数的默认定义;
3、如果显式声明了析构函数、复制构造函数或复制赋值运算符,那么编译器则不会自动提供移动构造函数和移动赋值运算符;
4、如果显式声明了析构函数,但是编译器仍然会自动提供默认的复制构造函数和复制赋值运算符,所以需要用到移动构造函数或移动赋值运算符的地方会自动使用复制构造函数和复制赋值运算符;
5、如果显式定义了移动构造函数或移动赋值运算符,编译器则不会再自动提供复制构造函数和复制赋值运算符;