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

来源:互联网 发布:java script else 编辑:程序博客网 时间:2024/05/29 13:20

对于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

0 0
原创粉丝点击