找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4342|回复: 18

怎样明白 C++ 中的深拷贝和浅拷贝?

  [复制链接]

12

主题

405

回帖

2310

积分

高级会员

积分
2310
发表于 2018-9-15 22:57:25 | 显示全部楼层 |阅读模式
   这个题目实在答案很简朴,而且根本上每一本C++书都会提及,但是大概对于初学者并不那么轻易的明白,以是我想实验以我的比喻来解说。

我以为浅拷贝是一个不喜好思索的懒汉,而深拷贝则是一个头脑严谨,喜好思索的人。对于懒汉来说,固然给了他使命,但是他总是想只管的少做一些事变,以是许多时间做出来的东西就是只看到了外貌,不会去思索对不对。

struct X{  int x;  int y;};

对于懒汉来说,他很直白的看到了x,看到了y,然后就拷贝x和y,然后就不管了,反正我完成我的拷贝了,至于对不对,我不管。

而一旦有了引用大概指针,事变就不一样了
struct X{  int x;  int y;  int* p;};
懒汉依然只是直接外貌级别的拷贝,于是拷贝x, y , p,但是他没有思索接下来的事变对不对。对于指针大概引用来说,如果只是拷贝外貌,那么拷贝后的物体的指针也和原来的指针指向的是同一个对象,以是固然目标想完成一个完善的克隆体,但是却发现克隆体和原来的物体中心另有一根线连着,没有完善的分离。

int *p = new int(47);int *q = p;

如q与p都是指向一个物体一样。

那么假如原来的物体烧毁了,但是如今拷贝的物体还在,那么这时间你拷贝后的物体的成员指针就是一个悬挂指针,指向了不再存在的物体,那么你访问的话,那就不知道会发生什么了。

而对于深拷贝,这一个勤劳的人,他不会只做外貌,他会把每一个细节都照顾好。于是,当他碰到指针的时间,他会知道new出来一块新的内存,然后把原来指针指向的值拿过来,如许才是真正的完成了克隆体和原来的物体的完善分离,假如物体比作人的话,那么原来的人的每一根毛细血管都被完善的拷贝了过来,而绝非只是外貌。以是,如许的代价会比浅拷贝泯灭的精神更大,付出的积极更多,但是是值得的。当原来的物体烧毁后,克隆体也可以活的很好。

然而究竟上是这个天下上大多都是懒汉,包罗编程的人,编译器等,以是默认的举动都是浅拷贝,于是有时间你必要做一个勤劳的人,让事变做精确,本身去完成深拷贝所必要的事变。
工控课堂 www.gkket.com

0

主题

439

回帖

2867

积分

高级会员

积分
2867
发表于 2018-9-18 06:28:23 | 显示全部楼层
党的好公民,人民的好公仆。。。
工控课堂 www.gkket.com

9

主题

429

回帖

2537

积分

高级会员

积分
2537
发表于 2018-9-29 14:37:32 | 显示全部楼层
淡定,淡定,淡定……
工控课堂 www.gkket.com

0

主题

408

回帖

2650

积分

高级会员

积分
2650
发表于 2018-10-3 19:11:51 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

451

回帖

2972

积分

高级会员

积分
2972
发表于 2018-11-16 07:58:56 | 显示全部楼层
感谢{author}无私分享!
工控课堂 www.gkket.com

0

主题

358

回帖

2277

积分

高级会员

积分
2277
发表于 2018-11-19 12:26:28 | 显示全部楼层
看到这帖子真是高兴!
工控课堂 www.gkket.com

11

主题

368

回帖

2645

积分

高级会员

积分
2645
发表于 2019-1-21 15:29:09 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

404

回帖

2721

积分

高级会员

积分
2721
发表于 2019-2-12 22:17:31 | 显示全部楼层
无回帖,不论坛,这才是人道。
工控课堂 www.gkket.com

0

主题

423

回帖

2733

积分

高级会员

积分
2733
发表于 2019-2-18 16:38:51 | 显示全部楼层
强烈支持楼主ing……
工控课堂 www.gkket.com

0

主题

94

回帖

237

积分

注册会员

积分
237
发表于 2025-11-17 13:36:27 | 显示全部楼层
求个链接 / 教程,楼主好人一生平安~
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-22 12:39 , Processed in 0.092292 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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