VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: lfq372

为什么复制构造函数的形参必须设置为引用类型?

[复制链接]

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-3-31 22:30:01 | 显示全部楼层
因为传值的话会拷贝所传的对像的副本,副本用什么拷贝产生,拷贝构造函数啊,所以就.....
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-4-1 10:45:01 | 显示全部楼层
如果是值参数传递,需要调用拷贝构造函数来完成参数传递。
而你现在又恰恰是在定义拷贝构造函数本身。。。。
回复

使用道具 举报

0

主题

11

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-4-1 17:15:02 | 显示全部楼层
首先你要明白普通的函数,像这样的demo::fun(const demo object),如果参数不是引用,是会默认调用一次拷贝构造函数的。

所以如果有一个函数demo::demo(const demo object),在参数传递的时候要调用拷贝构造函数也就是自己,调用自己的时候又是一次参数传递,所以又要调用一次自己,调用自己的时候又是一次参数传递,所以又要调用一次自己,……以下省略无限多字

从前有座山……
回复

使用道具 举报

0

主题

14

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-4-3 11:30:02 | 显示全部楼层
哦,我要是认为demo::demo(const demo object)是构造函数而非拷贝构造函数呢?
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-4-3 20:45:02 | 显示全部楼层
jotoos  

哦,我要是认为demo::demo(const demo object)是构造函数而非拷贝构造函数呢?

=====================================
  
哦!!!
这构造和拷贝构造是可以随便认为的吗?
这种形式不是已经默认为拷贝构造了吗?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-5-4 10:15:02 | 显示全部楼层
哦,原来如此,呵呵,学习
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-5-8 12:00:01 | 显示全部楼层
如果不是引用,
那么参数本身需要 复制 一个对象,
该对象的复制 需要调用 拷贝构造,
拷贝构造的参数又是一个对象, 又是调用拷贝构造 ....

死循环 。。。
回复

使用道具 举报

0

主题

4

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-6-17 13:15:01 | 显示全部楼层
各位大哥:
        帮个忙,小弟有个问题是关于SPI拦截网络封包技术的,我现在已经拦截到了数据包,放到了文件中,但不知道如何过滤数据包了,我是用c++写的!请各位专家指点!!!非常感谢!!留个联系方式也好啊,象qq什么的?
回复

使用道具 举报

0

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-8-1 06:15:01 | 显示全部楼层
曾经我也想问这个问题,我那时候看的是钱能的书,这个原因没有写,后来看了本老外的书知道了,

如果不传引用而传值的话,编译器会报告内存溢出,
原因是:  如果参数用值来传递,就需要创建该值的一个副本,如何创建副本呢??使用拷贝构造函数,但是原函数本身就是一个拷贝构造函数,所以它调用的是它自己,于是,形成递归调用,导致耗尽所有的内存
如果传的是引用,这样就可以不要建立副本了.....

看来我比楼主快一点点...我学到后面去了,呵呵!!一起加油!!
回复

使用道具 举报

1

主题

39

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-8-1 21:00:01 | 显示全部楼层

是一个逻辑错误.

参数传递是值传递的,而非引用传递, 就是要拷贝一次.
拷贝需要调用拷贝函数.
而拷贝函数又需要值传递,又要拷贝一次.

这样不断循环,直到内存溢出.

因而,拷贝函数应该采用不产生拷贝操作的引用形参.

demo::demo(const demo &object)
{
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表