C++拷贝构造函数 参数类型为什么是引用类型 ...

对于class CExample{};

拷贝构造函数 写成如下的几种方式

CExample(CExample ex){}   // 直接编译错误,不允许为CExample类型
CExample(CExample &ex){} // 是拷贝构造函数
CExample(const CExample &ex){} // 是拷贝构造函数
CExample(const CExample* c_class){} // 不是拷贝构造函数,参数是指针类型,而非对象
CExample& operator = (const CExample &ex)   //赋值函数(赋值运算符重载)

拷贝构造函数是必须要带引用类型的参数的, 而且这也是编译器强制性要求的

  • 使用引用相对于一般的变量参数,减少了一次内存拷贝
  • 使用const 是限定参数对象是只读的,避免犯错,建议加上const
  • 拷贝构造函数涉及到 深拷贝浅拷贝

  • 当拷贝构造不是引用而是直接对象时,根据拷贝构造的调用时机
    (参考:http://blog.csdn.net/qq_26437925/article/details/52125844
    显然CExample ce2(ce1), 会默认调用一次拷贝构造函数(ce1作为普通参数对象),这时调用的是ce1自己的拷贝构造函数,这时候又要调用自己的拷贝构造函数,会永远的递归下去。使用引用可以避免无限递归



两篇原文如下

http://www.cnblogs.com/this-543273659/archive/2011/09/18/2180575.html

http://blog.sina.com.cn/s/blog_88b95c430100uqt0.html


拷贝函数注意点

  • 拷贝函数和构造函数没有返回值

  • 拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象

  • 若类定义中没有声明拷贝构造函数,则编译器会自动生成一个缺省的拷贝构造函数,但是不会是该类的保护成员

这里写图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值