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

拷贝构造函数:

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

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; // 拷贝赋值







  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值