c++之复制构造函数为何形参是引用传递

  在c++中,其实需要自己定义类的”复制控制的三大函数“--------要么是因为类的成员变量中有指针类型....要么就是有特殊的操作想要实施,所以你就想:“要不要自己定义一个复制构造函数呢?”.....

   复制控制的三大函数如同三国演义中的“刘关张三兄弟”.......扬名之战就只是-----虎牢关下逼退吕布(指针型的成员变量).......

   吕布同学很牛,谁一不小心就被他所伤......自从有了刘关张,事情就好多了,也就是这个原因.....大家见到刘关张就想起了吕布同学,而见到了吕布就想到哪哥三.....

   上面只废话只是告诉大家.....复制构造函数、赋值操作符、析构函数-----刘关张....不用编译器自动合成,而自己为何要自寻烦恼去自己定义.....--------1 有指针类型的成员变量 2 有自己的特殊操作

   

   正题: 为什么复制构造函数要用引用传递:

       Sale::Sale(const Sale rhs);

    上述定义之所以不能工作,是因为她试图以传值方式将实参传递给复制构造函数。但是,当以传值方式传递参数时,会导致调用复制构造函数,因此,如果要使用以传值方式

   必须要使用一个“不以传值方式传递参数”的构造函数,の.....假如要定义一个以传值方式传递参数的复制构造函数(Sale::Sale(const Sale rhs);),又要以另一个“不以传值方式传递参数”的复制构造函数,.....那不就是说: 你想要一个” Sale::Sale(const Sale rhs); “ ....就必须定义一个 ” Sale::Sale(const Sale& rhs); “........假如不提供:”
Sale::Sale(const Sale& rhs); “......编译器就会一直纠缠着...直到有了一个以引用方式传递的复制构造函数....这就造成了一个死循环(无穷递归调用).....  综上所述: 只能把复制构造函数定义为一个引用方式传递实参的.......

当然,不一定是const类型......

原文链接: https://www.cnblogs.com/javaspring/archive/2012/04/21/2656136.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    c++之复制构造函数为何形参是引用传递

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/48156

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午12:01
下一篇 2023年2月9日 上午12:01

相关推荐