拷贝构造函数

1.概念

1)如果构造函数的第一个参数是自身类型的引用(几乎总是const,也可以接受非const,但是无论如何都必须是引用),且任何额外参数都有默认值,则它是拷贝构造函数

2)第一个参数必须是自身类型的引用:如果某个函数具有这个类的非引用参数,调用过程中要进行拷贝初始化,此时要调用拷贝构造函数来拷贝实参,如果拷贝构造函数的第一个参数不是引用,我们又需要拷贝实参,这样将无限循环下去

3)拷贝构造函数只有一个形参时,也可以被explicit修饰,当被explicit修饰时,不能使用“=”来调用拷贝构造函数

class A {
public:
    A(){}
    A(const A&) {
        cout << "我是A的拷贝构造函数" << endl;
    }
};

class B {
public:
    B() {}
    explicit B(const B&) {
        cout << "我是B的拷贝构造函数" << endl;
    }
};
int main()
{
    A a;
    A aa1(a);
    A aa2=a;

    B b;
    B bb1(b);
    //B bb2 = b;    //如果有此句,则发生编译错误,因为B的拷贝构造函数是explicit的

    return 0;
}

运行结果:

2.合成拷贝构造函数

  如果我们没有为一个类定义拷贝构造函数,编译器将会为我们定义一个,这个就叫合成拷贝构造函数

原文地址:https://www.cnblogs.com/Joezzz/p/9683697.html