// 这是一个类里可能的默认函数
Class A {
public:
A() ; // 构造函数
~A() ; // 析构函数
A(const A&) ; // 拷贝构造函数
A& operator=(const A&) ; // 拷贝赋值运算符
A(A&&) ; // 移动构造函数
A& operator=(A&&) ; // 移动赋值运算符
};
生成规则如下:
1.只要指定了一个要求传参的构造函数, 就会阻止编译器生成默认构造函数。
2.只要定义了拷贝构造函数或移动构造函数,就会阻止默认构造函数。
3.两种复制操作是彼此独立的, 即显式声明了其中一个, 不会阻止编译器默认生成另一个。
4.两种移动操作并不彼此独立, 即显式声明了其中一个, 就会阻止编译器默认生成另一个。
5.一旦显式声明了复制操作, 就会阻止编译器默认生成移动操作。
6.一旦显式声明了移动操作, 就会阻止编译器默认生成复制操作