社区
C++ 语言
帖子详情
为什么复制构造函数的形参必须设置为引用类型?
maplesx
2007-01-04 03:29:38
为什么复制构造函数的形参必须设置为引用类型?
如:
demo::demo(const demo &object)
{
}
而
demo::demo(const demo object)
{
}
就无法工作呢?
...全文
970
24
打赏
收藏
为什么复制构造函数的形参必须设置为引用类型?
为什么复制构造函数的形参必须设置为引用类型? 如: demo::demo(const demo &object) { } 而 demo::demo(const demo object) { } 就无法工作呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
为什么
复制
构造函数
的
形参
必须
是
引用类型
?
复制
构造函数
只有一个参数,由于在创建时传入的是同种类型的对象,所以一个很自然的想法是将该类型的对象作为参数,像这样: Sample (Sample a); 不幸的是,即使是这样朴实无华的声明也隐含了一个微妙的错误,呵,我们来看看:当某个时候需要以一个Sample对象的值来为一个新对象进行初始化时,编译器会在各个重载的
构造函数
版本(如果有多个的话)搜寻,它找到的这个版本,发现
C++
复制
构造函数
形参
必须
为引用原因
C++
复制
构造函数
形参
必须
为引用原因
c++
复制
构造函数
的
形参
为什么只能是
引用类型
?
有些看着是理所当然的东西有时候往往被我们忽略其深层次的意义,比如
复制
构造函数
的
形参
被设计为
引用类型
,这是为什么捏? 众所周知,c++中类没有给出
复制
构造函数
的话,编译器会自动补上一个,然而对于深拷贝来说编译器给的
复制
构造函数
是无法胜任的。这时候,我们就要自己动手实现这个
复制
构造函数
。 class Animal { public: Animal()
C++拷贝
构造函数
的
形参
为啥用引用
构造函数
用引用
拷贝
构造函数
的参数类型为什么
必须
是引用
如果参数类型是非常量引用,那么拷贝
构造函数
只能接受非常量对象作为参数,无法接受常量对象。当拷贝
构造函数
的参数不是
引用类型
时,而是传值(by value),会触发另一个拷贝
构造函数
的调用。拷贝
构造函数
的参数类型
必须
是引用,通常是常量引用(const reference),是因为拷贝
构造函数
在创建对象的副本时需要获取源对象的值。通过引用,拷贝
构造函数
只会获取源对象的引用,并不会触发额外的拷贝
构造函数
调用。总结起来,拷贝
构造函数
的参数类型
必须
是引用(通常是常量引用),以避免递归调用和提供更大的灵活性。
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章