拷贝构造函数 赋值构造函数

本文详细解释了C++中拷贝构造函数和拷贝赋值运算符的作用,包括如何正确使用它们,以及如何避免混淆两者。通过实例演示,帮助读者更好地理解和应用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

copy构造函数被用来"以同型对象初始化自我对象", copyassignment 操作符被用来"从另一个同型对象中拷贝其值到自我对象" :
class Widget {
public:
Widget();                                                                  //default构造函数
Widget(const Widget& rhs);                                 //copy构造函数
Widget& operator=(const Widget& rhs);            //copy assignment 操作符
Widget wl;                       II调用default 构造函数                                                         
Widget w2 (wl) ;              II调用copy 构造函数
wl = w2;                          II调用copy assignment 操作符

当你看到赋值符号时请小心,因为"="语法也可用来调用copy 构造函数:
Widget w3 = w2;              II调用copy 构造函数!

幸运的是" copy 构造"很容易和"copy 赋值"有所区别:

如果一个新对象被定义(例如以上语句中的w3,一定会有个构造函数被调用,不可能调用赋值操作。
如果没有新对象被定义(例如前述的"w1 = w2" 语句) ,就不会有构造函数被调用,那么当然就是赋值操作被调用。

 

注:

所谓default构造函数是一个可被调用而不带任何实参者。这样的构造函数要不没有参数,要不就是每个参数都有缺省值。

class A (
public:
A();                                                      //default构造函数
class B (
public:
explicit B(int x = 0, bool b = true); //defauft构造函数;

};

class C {
public:
explicit C (工nt x);                                                  //不是default构造函数

};


记住:

1、当你编写一个copying函数,请确保(1) 复制所有local 成员变量, (2) 调用所有base classes 内的适当的copying 函数。

2、不要尝试以某个copying 函数实现另一个copying 函数。应该将共同机能放进第三个函数中,并由两个coping 函数共同调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值