C++默认函数生成规则如下:
1.只要指定了一个要求传参的构造函数, 就会阻止编译器生成默认构造函数。
2.只要定义了拷贝构造函数或移动构造函数,就会阻止默认构造函数。
3.两种拷贝操作是彼此独立的, 即显式声明了其中一个, 不会阻止编译器默认生成另一个。
4.两种移动操作并不彼此独立, 即显式声明了其中一个, 就会阻止编译器默认生成另一个。
5.一旦显式声明了拷贝操作, 就会阻止编译器默认生成移动操作。
6.一旦显式声明了移动操作, 就会阻止编译器默认生成拷贝操作。
class A {
public:
A(){cout<<"defaut constructor" <<endl;}
A(const A &a) {cout<<"copy constructor" <<endl;}//copy constructor
A &operator=(const A &a) {cout<<"copy assignment constructor" <<endl;return *this; }//copy assignment constructor
A(A &&a) {cout<<"move constructor" <<endl;}
//A &operator=(A &&a) {cout<<"move assignement constructor" <<endl;return *this; }
};
void testClass()
{
A a;
A b;
A c(std::move(a));
// a=b;
//A d(std::move(b));
A e;
e = std::move(b);
}
输出:
defaut constructor
defaut constructor
move constructor
defaut constructor
copy assignment constructor
参考链接:https://blog.csdn.net/mozifight/article/details/126556316