复制构造函数

虽然使用赋值运算符是相当简单的,正确实施重载赋值运算符可能比你预期的更微妙的一点。有两个主要的原因。首先,在某些情况下,赋值操作符不打电话的时候,你可能会想到这是。第二,在处理动态分配的内存有问题(我们会在下一堂课上盖)。

赋值操作符用于复制的值从一个对象到另一个已存在的对象。这里的关键词是“已经存在”。考虑下面的例子:

Cents cMark(5); // calls Cents constructor
Cents cNancy; // calls Cents default constructor
cNancy = cMark; // calls Cents assignment operator

在这种情况下,cnancy已经被时间的分配被执行了。因此,赋值操作符被称为仙。赋值操作符必须重载为成员函数。

如果被复制到该对象不存在,会发生什么?理解在这种情况下会发生什么,我们需要谈谈复制构造函数。

复制构造函数

考虑下面的例子:

1
2
Cents cMark(5); // calls Cents constructor
Cents cNancy = cMark; // calls Cents copy constructor!

因为第二句使用一个等于符号的话,你可能会认为它调用赋值运算符。然而,它不!它实际上是一种特殊类型的构造函数调用调用复制构造函数。复制构造函数是一种特殊的构造函数来初始化一个新对象从现有的对象。

复制构造函数的目的和赋值操作符相当-复制一个对象到另一个。然而,赋值操作符复制到现有对象,并复制构造函数复制到新创建的对象。

与复制构造函数和赋值操作符产生许多新的程序员混淆的差异,但这真的不是那么难。总结:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值