| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 989 人关注过本帖
标题:[讨论]探讨 深拷贝与浅拷贝的问题
只看楼主 加入收藏
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
 问题点数:0 回复次数:7 
[讨论]探讨 深拷贝与浅拷贝的问题
这两种拷贝的区别

都在哪些具体的情况下要用到深拷贝呢

有一点是肯定的,就是在有堆内存空间分配的时候肯定需要
搜索更多相关主题的帖子: 拷贝 探讨 
2007-04-25 12:21
sunspirit
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-4-10
收藏
得分:0 

我想在类的成员变量中含有 其他类的话 这种情况应当用到深拷贝吧。。。

2007-04-25 14:15
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 
帖子沉了好久了
今天又来看了下

讨论的还不够,楼上说的正确吗

下面是书上的又一段话:
堆内存并不是唯一 需要拷贝构造函数的资源,但它是最常用的一个。
打开文件,占有硬设备服务也需要深拷贝。它们是析构函数必须返还的资源类型。因此
一个很好的经验是:如果你的类需要析构函数来析构资源,则它也需要一个拷贝构造函数。
因为 通常对象都是自动被析构的。如果需要定义一个析构函数,那就意味着有额外资源要在对象被析构之前释放。此时,对象的拷贝就不是浅拷贝了。


有补充的请接着补充

“运行正确”的程序不见得是高质量的程序
2007-04-28 19:50
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
听说过“三个火枪手”吗?

就是 copy constructor,assighment operator,destructor

需要其中一个的时候,就必须显示定义其他两个。三者必须同时出现!

Fight  to win  or  die...
2007-04-28 21:09
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

to : cpluslover


当我们创建一个类时,如果不显式定义复制构造函数(copy constructor),那么编译器会为我们提供一个合成复制构造函数。1,那么合成复制构造函数做了些什么?2,我们在什么情况下需要定义自己的构造函数呢?

1,合成复制构造函数的行为是,逐个成员初始化,将新对象初始化为原来的副本。(也就是浅拷贝)
struct A{
int x;
int y;
};
A a = {1,2};
A a2(a); //这里将调用合成复制构造函数,将新对象a2的成员逐个初始化为1,2

2,当用上述方法不能满足复制的要求时,比如,有个数据成员是指针,或者在创建新对象时必须做一些特定的工作,就要定义自己的复制构造函数。我们指定复制构造函数的行为满足我们的需要。(也就是深拷贝)

可以使用合成构造函数的地方也可以使用合成赋值操作符(assighment operator),可以把他们看成一个单元,需要其中一个,则几乎肯定需要另一个。

当用到自身定义的析够函数(destructor)时,说明对象在创建时分配了资源(例如动态内存),需要一个操作自动回收。所以,当类需要析够函数时,它也一定需要复制构造函数和赋值操作符。

这相当于一个经验法则吧,这三者也称为复制控制成员!


Fight  to win  or  die...
2007-04-29 21:26
海子
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-7-13
收藏
得分:0 
例如:
1. 浅拷贝
int *a = new int[5];
int *b ;
b = a;
delete a;
delete b;//出错,空间已经释放
1. 深拷贝
char *c = new char[5];
char *c1 = new char[sizeof(c)];
strcpy(c,c1);
delete c;
delete c1;
2007-04-30 11:07
cpluslover
Rank: 1
等 级:新手上路
威 望:1
帖 子:91
专家分:0
注 册:2006-12-13
收藏
得分:0 

谢谢大家 了
辛苦了


“运行正确”的程序不见得是高质量的程序
2007-04-30 16:29
快速回复:[讨论]探讨 深拷贝与浅拷贝的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024953 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved