拷贝构造函数与拷贝赋值操作符

拷贝构造函数:

        如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。

class Foo
{
public:
    Foo();  // 默认构造函数
    Foo(const Foo &); // 拷贝构造函数
    // ...
};
        一般情况,拷贝构造函数会将其参数的成员逐个拷贝到 正在创建的类对象中。编译器从给定对象中依次将每个非static成员拷贝到正在创建的对象中。如何拷贝呢?对类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝第一个bits。
        什么时候调用拷贝构造函数呢? 

       (1)当用类的一个对象初始化该类的另一个对象时;

A a(2);
A b(a); // C++ 风格
A b = a; // C风格
       (2)将一个对象作为实参传递给一个非引用类型的形参时;

       (3)从一个返回类型为非引用类型的函数返回一个对象时;

       (4)用花括号列表初始化一个数组中的元素或一个聚合类中的成员时;

       (5)其他需要产生一个临时类对象时。


       关于拷贝构造函数与拷贝赋值操作符的区别:

        两都都是用已存在的对象A来初始化另一个对象B。不同之处在于:

        拷贝构造函数是针对一个未存在的对象进行初始化;拷贝赋值是针对已存在的对象进行初始化。

A a;
A b = a; // 拷贝构造
----------------------------
A a;
A b;
b = a; // 拷贝赋值







你可能感兴趣的:(C++)