C++拷贝构造函数_形参为什么只能是引用(不能传值或指针)

先给出答案:

拷贝构造函数不能用数值或指针形参原因,不是为了节省创建副本的空间与时间。而是那样做会无限循环递归下去。

 

举个例子来看一下为什么会这样。(反例)

class Example()
{
public:
    Example(int a):aa(a) {}    //构造函数

    Example(Example ex)        //拷贝构造函数(值传递参数)
    {
        aa = ex.aa;
    }
private:
    int aa;
};

int main()
{
    Example e1(10);
    Example e2 = e1;
    
    return 0;
}

执行 Example e2 = e1; 时

调用了拷贝构造函数(传值型的)

相当于 e2.Example(e1);

在函数中,因为是值传递所以又需要用e1的值拷贝创建一个副本对象ex,则又需要调用拷贝构造函数ex.Example(e1)

这样就会无限重复下去来完成创建副本ex,无限调用ex.Example(e1)

这就是为什么拷贝构造函数不能使用值传递的形参原因。

 

正确拷贝构造函数:

Example(const Example &ex)   
    {
        aa = ex.aa;
    }

 

..................................................不能用指针的原因待更............................

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值