首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >深拷贝与浅拷贝

深拷贝与浅拷贝
EN

Stack Overflow用户
提问于 2010-04-17 08:46:48
回答 2查看 154.1K关注 0票数 61

可能重复: 深拷贝和浅拷贝有什么区别?

深拷贝和浅拷贝的区别是什么?复制构造函数做什么类型的复制?

EN

回答 2

Stack Overflow用户

发布于 2010-04-17 08:50:01

这方面的典型示例是指向结构或对象(是可变的)的指针数组。

浅拷贝复制数组并维护对原始对象的引用。

深拷贝也会复制(克隆)对象,因此它们与原始对象没有任何关系。这意味着对象本身是被深拷贝的。这是它变得困难的地方,因为没有真正的方法来知道某件东西是否被深复制。

复制构造函数用于使用以前创建的同一个类的对象初始化新对象。默认情况下,编译器编写了一个浅拷贝。当不涉及动态内存分配时,浅拷贝工作得很好,因为当涉及动态内存分配时,这两个对象将指向堆中相同的内存位置,因此为了消除此问题,我们编写了深度复制,以便两个对象在内存中都有自己的属性副本。

为了阅读包含完整示例和解释的详细信息,您可以看到文章构造函数和析构函数

默认的复制构造函数是浅的。您可以在适当的情况下使自己的副本构造函数很深或浅。见C++注释: OOP:复制构造函数

票数 16
EN

Stack Overflow用户

发布于 2010-04-17 08:56:17

深层复制实际上是执行深度复制。这意味着,如果您的类有一些字段是引用,则它们的值将被复制,而不是引用自身。例如,如果有两个类的实例,A& B具有引用类型的字段,并执行深度复制,则在A中更改该字段的值不会影响B中的值,反之亦然。浅层复制的情况不同,因为只有引用被复制,因此,在复制对象中更改此字段将影响原始对象。

复制构造函数做什么类型的复制?

它依赖于实现。这意味着对此没有严格的规则,您可以像深拷贝或浅拷贝一样实现它,但据我所知,在副本构造函数中实现深度副本是一种常见的做法。但是,默认的复制构造函数执行浅拷贝。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2657810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档