问:大家能给我讲一下浅拷贝和深拷贝的区别吗?

engine198473 2004-05-13 12:40:47
大家能给我讲一下浅拷贝和深拷贝的区别吗?或者给一篇这样的文章
...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iidj 2004-05-14
  • 打赏
  • 举报
回复
例子简单明了。比我的纯文字性的要好。
conglingkaishi 2004-05-14
  • 打赏
  • 举报
回复
问题的起源是资源强占的问题。注意是强占不是抢占。比如一个类对象a申请了系统资源,CPU或者打印机,如果直接用b=a进行赋值的话,拷贝函数会将b看作a一样的东西,这时候就出现了2个对象同时占有资源。学操作系统的话就应该知道,这样是很危险的。为了避免这样的危险,我们就要进行深拷贝,另辟资源,系统不分配则等待或报错。
问题的实现是:浅拷贝不管资源属于谁,直接使a、b相同。深拷贝则是要在拷贝构造函数中指明要另外开辟新资源分给这个对象b,我们要对象a的内容,但不要它占有的资源。
我也是草鱼一条,说的不对的请大家帮忙指正。
xjp6688 2004-05-14
  • 打赏
  • 举报
回复
可见,浅拷贝指的是'指针'拷贝,深拷贝指的是'值'拷贝。
itmaster 2004-05-13
  • 打赏
  • 举报
回复
主要是指针成员的拷贝
hab1980 2004-05-13
  • 打赏
  • 举报
回复
如果没有指针,就没有浅拷贝与深拷贝!
看下面的类:
struct A
{
int n;
};
在类A的两个对象之间进行拷贝时,没有浅拷贝与深拷贝的说法。
再看下面的类:
struct B
{
int* p;
};
在类B的两个对象之间进行拷贝时,分为两种情况:
1、浅拷贝
B x, y;
y.p = new int;
*y.p = 10;
// 浅拷贝代码段
{
x.p = y.p; // 则有:*x.p = 10
}
delete y.p; // 合法
delete x.p; // 非法
2、深拷贝
B x, y;
y.p = new int;
*y.p = 10;
// 深拷贝代码段
{
x.p = new int;
*x.p = *y.p; // 亦有:*x.p = 10;
}
delete y.p; // 合法
delete x.p; // 合法

可见,浅拷贝指的是'指针'拷贝,深拷贝指的是'值'拷贝。
  • 打赏
  • 举报
回复
推荐:
<<Thinking in C++>>
iidj 2004-05-13
  • 打赏
  • 举报
回复
简单的说:
类中的字符指针p,q
如果作 q=p;

浅拷贝是将p的内容赋给另一个指针q。(p里面存储的是地址)这样两个指针指向同一个内存地址。
深拷贝是另外开辟一块存储空间。将p指向的地址中的内容复制到新开辟的存储空间。而q则指向新开辟的存储空间。
以前有类似的贴子的。找一找,比较详细的。

lj197912 2004-05-13
  • 打赏
  • 举报
回复
比如;
template <class T>
Array<T>::Array (const Array <T>&x)
{
size=x.size;
alist=x.alist;
}
void main(void)
{
Array <int> A(10);
....
Array <int> B(A);
}
这样默认拷贝构造函数执行浅拷贝,只是将A的首地址简单赋给对象B的指针成员,对象B根本没有构造自己的数组
lj197912 2004-05-13
  • 打赏
  • 举报
回复
默认的拷贝构造函数只能实现浅拷贝,浅拷贝会带来安全的隐患。要实现深拷贝必须编写拷贝构造函数
uoyevoli 2004-05-13
  • 打赏
  • 举报
回复
简单的说,浅指的是只拷贝指针,深就是拷贝指针指向的内容。
浅拷贝来的东西和源实质上是同一个东西。而深拷贝来的东西是新建了一个对象,而这个对象和源对象的内容一样。
zwcrsf 2004-05-13
  • 打赏
  • 举报
回复
但是是怎样的指针成员的拷贝了能不能说得具体一点!

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧