c++,深拷贝构造函数与浅拷贝构造函数有什么不同

 我来答
翲燚
2016-09-13 · 知道合伙人软件行家
翲燚
知道合伙人软件行家
采纳数:436 获赞数:3029

向TA提问 私信TA
展开全部

 反对上面的答案。综合介绍下面三种情形:

赋值

        将对象直接使用等号赋值,只是让等号的左值拥有右值的一个引用,相当于指针赋值一样。在这个过程中,没有新对象产生。

浅拷贝

        浅拷贝已经和赋值有着本质区别了。浅拷贝会在内存中创建一个新的对象,并将被拷贝的对象的所有数据成员都复制到新的对象中。

深拷贝

        拷贝相对于赋值,其目的是产生和原来一样的新的对象。但是,即便使用了浅拷贝也不一定是彻彻底底和原来的对象独立了。考虑下面的情景下:

对象a的某数据成员X,是对象b的引用

        在这种情况下,假设我们使用浅拷贝对象a生成新对象aa,那么a.X和aa.X依然都是同一个b的引用。这是因为,浅拷贝只是给对象的所有数据成员进行了赋值操作,而对b的引用的赋值,正如上面所讲的,只是让新对象也拥有对b的引用,而没有继续拷贝对象b。

        因此,深拷贝就是在这点上区分于浅拷贝的。当深拷贝在遇到引用数据成员时,不会只赋值引用,而是会拷贝一个新的

        所以,在上面的情景下:

  1. 使用浅拷贝时,a.X和aa.X是同一个b的引用

  2. 使用深拷贝时,a.X是b的引用,而aa.X是由“b复制来的bb”的引用。

Aupryyyyyyyyyy
2016-09-10 · TA获得超过1636个赞
知道大有可为答主
回答量:1574
采纳率:53%
帮助的人:939万
展开全部
深拷贝就是把另一个对象在内存里的数据全部复制到当前对象里
而浅拷贝就只是让当前对象有一个对另一个对象的引用而已
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式