社区
C++ 语言
帖子详情
为什么复制构造函数的形参必须设置为引用类型?
maplesx
2007-01-04 03:29:38
为什么复制构造函数的形参必须设置为引用类型?
如:
demo::demo(const demo &object)
{
}
而
demo::demo(const demo object)
{
}
就无法工作呢?
...全文
929
24
打赏
收藏
为什么复制构造函数的形参必须设置为引用类型?
为什么复制构造函数的形参必须设置为引用类型? 如: demo::demo(const demo &object) { } 而 demo::demo(const demo object) { } 就无法工作呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jikeyuan1
2010-10-14
打赏
举报
回复
其实这个问题我也不太懂 谢啦 学到了 嘿嘿
OOPhaisky
2007-01-10
打赏
举报
回复
这个已经是老问题了,我就至少看见过n次了。
------------------------------------------------------------------------------------
如果不是引用,
那么参数本身需要 复制 一个对象,
该对象的复制 需要调用 拷贝构造,
拷贝构造的参数又是一个对象, 又是调用拷贝构造 ....
死循环 。。。
------------------------------------------------------------------------------------
正解。
DragonBill
2007-01-09
打赏
举报
回复
只有死循环一个原因吗?不对吧
wowRicky
2007-01-09
打赏
举报
回复
已经很清楚了,
值传递要调用拷贝构造函数,,原函数本身就是一个拷贝构造函数,无穷递归
htqx
2007-01-09
打赏
举报
回复
是一个逻辑错误.
参数传递是值传递的,而非引用传递, 就是要拷贝一次.
拷贝需要调用拷贝函数.
而拷贝函数又需要值传递,又要拷贝一次.
这样不断循环,直到内存溢出.
因而,拷贝函数应该采用不产生拷贝操作的引用形参.
demo::demo(const demo &object)
{
}
xusheng_fenglin
2007-01-09
打赏
举报
回复
曾经我也想问这个问题,我那时候看的是钱能的书,这个原因没有写,后来看了本老外的书知道了,
如果不传引用而传值的话,编译器会报告内存溢出,
原因是: 如果参数用值来传递,就需要创建该值的一个副本,如何创建副本呢??使用拷贝构造函数,但是原函数本身就是一个拷贝构造函数,所以它调用的是它自己,于是,形成递归调用,导致耗尽所有的内存
如果传的是引用,这样就可以不要建立副本了.....
看来我比楼主快一点点...我学到后面去了,呵呵!!一起加油!!
jixingzhong
2007-01-05
打赏
举报
回复
如果不是引用,
那么参数本身需要 复制 一个对象,
该对象的复制 需要调用 拷贝构造,
拷贝构造的参数又是一个对象, 又是调用拷贝构造 ....
死循环 。。。
ShardowM
2007-01-05
打赏
举报
回复
哦,原来如此,呵呵,学习
mahongwei888
2007-01-05
打赏
举报
回复
各位大哥:
帮个忙,小弟有个问题是关于SPI拦截网络封包技术的,我现在已经拦截到了数据包,放到了文件中,但不知道如何过滤数据包了,我是用c++写的!请各位专家指点!!!非常感谢!!留个联系方式也好啊,象qq什么的?
kenneth_lueng
2007-01-04
打赏
举报
回复
sinall() ( ) 信誉:94 Blog 2007-01-04 16:17:19 得分: 0
哦,我要是认为demo::demo(const demo object)是构造函数而非拷贝构造函数呢?
=====================================
哦!!!
这构造和拷贝构造是可以随便认为的吗?
这种形式不是已经默认为拷贝构造了吗?
sinall
2007-01-04
打赏
举报
回复
哦,我要是认为demo::demo(const demo object)是构造函数而非拷贝构造函数呢?
w_anthony
2007-01-04
打赏
举报
回复
首先你要明白普通的函数,像这样的demo::fun(const demo object),如果参数不是引用,是会默认调用一次拷贝构造函数的。
所以如果有一个函数demo::demo(const demo object),在参数传递的时候要调用拷贝构造函数也就是自己,调用自己的时候又是一次参数传递,所以又要调用一次自己,调用自己的时候又是一次参数传递,所以又要调用一次自己,……以下省略无限多字
从前有座山……
晨星
2007-01-04
打赏
举报
回复
如果是值参数传递,需要调用拷贝构造函数来完成参数传递。
而你现在又恰恰是在定义拷贝构造函数本身。。。。
casale
2007-01-04
打赏
举报
回复
因为传值的话会拷贝所传的对像的副本,副本用什么拷贝产生,拷贝构造函数啊,所以就.....
zhousqy
2007-01-04
打赏
举报
回复
因爲參數是值傳遞
redleaves
2007-01-04
打赏
举报
回复
因为常引用不产生副作用.看起来又直接
v2002750
2007-01-04
打赏
举报
回复
因为以一个对象为参数的时候会调用拷贝构造函数,如果拷贝构造函数以对象为参数,它就会调用自身。
kenneth_lueng
2007-01-04
打赏
举报
回复
引用保证你传进来的是一个对象
v2002750
2007-01-04
打赏
举报
回复
无穷递归
maplesx
2007-01-04
打赏
举报
回复
你说的我还是不明白
加载更多回复(3)
C++
复制
构造函数
形参
必须
为引用原因
原因是:调用
复制
构造函数
时需要传入实参,而在进行形实结合时,若
形参
是类的对象,需要调用该类的
复制
构造函数
,将参
复制
到
c++
复制
构造函数
的
形参
为什么只能是
引用类型
?
有些看着是理所当然的东西有时候往往被我们忽略其深层次的意义,比如
复制
构造函数
的
形参
被设计为
引用类型
,这是为什么捏? 众所周知,c++中类没有给出
复制
构造函数
的话,编译器会自动补上一个,然而对于深拷贝来...
拷贝
构造函数
自己的参数
必须
是
引用类型
?
拷贝
构造函数
自己的参数
必须
是
引用类型
? 答案是肯定的,如若不是本参数的
引用类型
,则会造成死循环,无限递归。因为函数调用过程为:
复制
构造函数
,其实也是一个函数,如果你给它定义的参数,是一个类型,而不是...
拷贝
构造函数
的类型为什么
必须
使用
引用类型
但是如果我问你“拷贝
构造函数
的参数为什么
必须
使用
引用类型
?”这个问题, 你会怎么回答? 原因: 如果拷贝
构造函数
中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式...
为什么
复制
构造函数
的参数
必须
是
引用类型
?
那么,试想一下,如果我们的
复制
构造函数
是通过值传递的话,它就会调用它本身来产生一个副本,就这样会无限递归下去,而如果传递引用,就不会产生副本,也不会调用
复制
构造函数
,问题得以解决。 ...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章