为什么拷贝构造函数使用的是引用传递而不是值传递?

简单来说,如果使用值传递,会出现一个无限循环,并最终出现错误。

举个例子:一个类为temp,假设拷贝构造函数为值传递:

temp (const temp C)
{
    ...
}
temp A; //生成了一个temp类的对象
temp B = A; //将会调用拷贝构造函数

此时,B需要调用其拷贝构造函数,需要将A进行值传递进入B的拷贝构造函数,而在进行值传递时,B的拷贝构造函数会生成一个该类的临时对象(假设为C),会执行temp C=A(初始化形参,也就是初始化函数的局部变量),这又将调用C的拷贝构造函数,将A以值传递的方式传入…如此往复,每一次都会产生新的对象,从而耗尽资源,产生错误。

而引用传递为什么不会有这个问题呢?
假设拷贝构造函数为:

temp (const temp &C)
{
    ...
}
temp A;
temp B = A;

此时,当上述B调用拷贝构造函数时,会生成一个临时的引用变量,而不是对象,会执行temp &C=A(同样是初始化形参,只不过是初始化一个引用),这不会产生新的对象,也就不会调用拷贝构造函数,只是增加了一个指向A的临时引用而已。

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值