拷贝构造函数的参数为什么必须为引用!!

拷贝构造函数必须使用引用类型传递。const class& a  或者 class& a都行。

问1:为什么不能使用普通变量或者指针变量。

答:普通变量会引起无限递归调用拷贝构造函数本身。而使用指针变量可以实现拷贝构造函数,但是调用起来与我们的习惯不符,容易出错。

        具体解释:

        (前提)普通变量和指针变量传递中会被自动复制一份给实参。

        当使用普通变量时,参数传递过程中两端都是class A,那么系统就会调用拷贝构造函数,这样又发生了实参->形参的过程,然后又会调用拷贝构造,如此反复,无限递归。见下图代码:

 

        当时用指针变量时,那么默认规定了,要想调用此拷贝构造函数,必须使用对象指针。如下面的代码。a是一个指针,那么A b1 = a;此时调用了指针拷贝构造。但是 A b2 = a1; 它调用的是默认拷贝构造。一般的我们更习惯使用前者。 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值