社区
C++ 语言
帖子详情
问:大家能给我讲一下浅拷贝和深拷贝的区别吗?
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; // 合法
可见,浅拷贝指的是'指针'拷贝,深拷贝指的是'值'拷贝。
海阔天空的创业与创作
2004-05-13
打赏
举报
回复
推荐:
<<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
打赏
举报
回复
但是是怎样的指针成员的拷贝了能不能说得具体一点!
JavaScript
深拷贝
和
浅拷贝
概念与用法实例分析
简单来
讲
浅拷贝
和
深拷贝
都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为
浅拷贝
和
深拷贝
。 概念1:
浅拷贝
浅拷贝
就是指拷贝引用,新生成的引用和原来的引用都是指向同...
学习Python一年,这次终于弄懂了
浅拷贝
和
深拷贝
官方文档:copy主题 源代码: Lib/copy.py 话说,网上已经有很多关于...那
浅拷贝
和
深拷贝
有什么
区别
呢,你能给我
讲
讲
吗? 从引用vs.拷贝说起 首先,我们要弄清楚什么是对象引用与对象拷贝(复制)。 对象引用 Python中
Vue父子组件传值的一些坑
再系统梳理下 JavaScript 的
深拷贝
与
浅拷贝
相关知识点。 1.
问
题描述 父组件传值给子组件,子组件改变传过来的值后,父组件的值也会跟着改变。 这个
问
题比较冷门,平时如果对组件通信使用得比较简单,一般不会遇到...
深拷贝
浅拷贝
的
区别
?如何实现一个
深拷贝
?
深拷贝
浅拷贝
的
区别
?如何实现一个
深拷贝
?
前端面试:
浅拷贝
和
深拷贝
的
区别
?
浅拷贝
(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;
深拷贝
(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变。...
C++ 语言
64,666
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章