C++拷贝构造函数 参数类型为什么是引用类型 ...
2016-09-09 10:11
316 查看
对于class CExample{};
拷贝构造函数 写成如下的几种方式
拷贝构造函数是必须要带引用类型的参数的, 而且这也是编译器强制性要求的
使用引用相对于一般的变量参数,减少了一次内存拷贝
使用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
拷贝函数注意点
拷贝函数和构造函数没有返回值
拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象
若类定义中没有声明拷贝构造函数,则编译器会自动生成一个缺省的拷贝构造函数,但是不会是该类的保护成员
拷贝构造函数 写成如下的几种方式
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
拷贝函数注意点
拷贝函数和构造函数没有返回值
拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象
若类定义中没有声明拷贝构造函数,则编译器会自动生成一个缺省的拷贝构造函数,但是不会是该类的保护成员
相关文章推荐
- 为什么C++中拷贝构造函数的参数类型必须是引用?
- C++拷贝构造函数的参数为什么必须使用引用类型(无限递归)
- C++拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- c++拷贝构造函数参数为什么只能是引用
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型 .
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型(避免无限递归拷贝,但其实编译器已经强制要求了)
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型.
- 拷贝构造函数的参数为什么必须使用引用类型
- 拷贝构造函数的参数为什么必须使用引用类型——避免拷贝死循环
- 【C++】C++中拷贝构造函数的参数类型必须是引用
- c++中拷贝构造函数的参数类型必须是引用