C++复制构造函数

今天看了effect C++看到了,不知构造函数,就回忆了一下,然后再网上看了一些资料,就来总结一下


class Widget
{
public:
Widget();   //default 构造函数
Widget(const Widget & rhs);   //copy 构造函数
Widget& operator=(const Widget& rhs);  //copy assignment 操作符
~Widget{};();
.....


};


Widget w1;       //default 构造函数
Widget w2(w1);  //调用copy构造函数
w1 = w2;        //调用copy assignment 操作符



当你看到赋值操作符小心,因为"="语法可以用来调用copy构造函数

Widget w3 = w1    //copy 构造函数

copy 构造,和copy 赋值,很容易区分,幸好,如果一个新的对象别定义(与上面的w3),则调用copy构造,反之则赋值.看到很多网上的资料都是说,只要一看到对象赋值另外一个同类型的对象,就是copy 构造,这是错误的现在来看

至于我当初学习copy构造的时候,为什么要引用来作为传递了??

传入参数用const类型的引用,可以节省参数赋值的开支,最后赋值给的是this指针指向的对象,复制构造函数会默认的进行简单变量的赋值。
另外重要的原因就是:避免递归调用!
如果定义如下的构造函数:
 Widget:: Widget( Widget rhs);
那么当用一个 Widget对象初始化另一个 Widget对象时,如
 Widget w4=w4;//假设w4是一个已存在Widget对象
该复制构造函数就会被无限制地递归下去:调用WIdget(Widget rhs)
说的不好的,欢迎拍砖,互相学习,第一写.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值