您的位置:首页 > 编程语言 > C语言/C++

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

2016-09-09 10:11 316 查看
对于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

拷贝函数注意点

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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: