C++ class 之默认函数生成规则constructor,

2023-09-02  本文已影响0人  1哥

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

上一篇 下一篇

猜你喜欢

热点阅读