`

深复制与浅复制

    博客分类:
  • c++
 
阅读更多
2者主要区别:是否为成员变量分配新内存空间
复制构造函数有2种:深复制与浅复制
当将一个对象A复制给另一个对象B时,系统会调用复制构造函数
编译器默认的复制构造函数是浅拷贝,它将原对象的每一个成员变量复制到新对象的成员变量中去。因而最后两个对象的变量均指向相同的数据成员的内存地址。
当数据成员中没有指针时,浅拷贝是可行的。
但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址M,当程序中删除一个对象A时,析构函数会释放掉指针变量所指向的那块内存空间M,而对象B的指针变量仍然指向该空间M,而此时该空间已不存在,因而导致指针悬挂现象。
所以,这时,必须采用深拷贝,创建自己的复制构造函数。 我们自己来为我们的成员变量分配新内存,这样一个对象在析构后只是删除自己相关的内存空间,而不会影响到另一个对象。
深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。
简而言之,当数据成员中有指针时,必须要用深拷贝。
分享到:
评论

相关推荐

    java的深复制与浅复制

    ### Java的深复制与浅复制 #### 一、概述 在Java编程中,对象的复制是一个常见的需求。复制对象的目的通常是为了保留一个备份或者创建一个新的实例来避免对原始对象的修改影响到其他部分的程序逻辑。Java提供了两...

    深复制,浅复制区别c#代码

    ### 深复制与浅复制在C#中的区别 #### 引言 在面向对象编程中,对象的复制是一项常见的需求。对象复制可以分为两种主要类型:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方式有着本质的区别,并且在...

    Java深复制与浅复制.doc

    在Java编程中,复制对象是常见的操作,主要分为两种方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方式的区别在于处理对象内部引用其他对象的情况。 1. **浅复制(浅克隆)**: 浅复制是指创建一...

    Java深复制与浅复制&Clone

    有两种主要的复制方式:浅复制(Shallow Copy)和深复制(Deep Copy)。这两种复制方法在处理对象时有不同的行为和应用场景,特别是在涉及到复杂数据结构时。本文将深入探讨这两种复制方式,并通过实例来解释它们的...

    Java对象深复制与浅复制实例详解

    Java对象深复制与浅复制实例详解 Java对象深复制与浅复制是Java编程中两个重要的概念,它们都是对象复制的方式,但它们有着不同的实现机制和应用场景。在本文中,我们将详细介绍Java对象深复制与浅复制的概念、实现...

    android 浅复制和深复制-Java Generic Deep Copy 篇

    本文将深入探讨Java中的浅复制和深复制,并以Android为背景,结合具体的实例讲解如何实现Java泛型深拷贝。 首先,我们要理解浅复制和深复制的概念。浅复制(Shallow Copy)是指创建一个新的对象,然后将原对象引用...

    复制构造函数

    ### 复制构造函数:深度复制与浅复制详解 在C++编程中,对象的复制是一种常见的需求,尤其是在处理复杂的类实例时。复制构造函数,作为C++中一种特殊的构造函数,专门用于创建一个对象的复制品。然而,简单地复制...

    31.3、深复制和浅复制clone1

    在编程领域,尤其是在Java语言中,深复制和浅复制是两个重要的概念,它们与对象的复制行为密切相关。这里我们将深入探讨这两个概念,并通过实例来解释它们的区别。 首先,让我们了解基本数据类型的复制。在Java中,...

    iOS 深复制浅复制

    "深复制"和"浅复制"是两种不同的复制方式,它们在内存管理和对象引用上有着显著的区别。 首先,让我们理解“浅复制”(Shallow Copy)。浅复制是指创建一个新对象,这个新对象的指针指向的是原始对象中的数据的副本...

    dotnet-DeepCopy用于深层复制NET对象的简单高效库

    深度复制与浅复制(Shallow Copy)的主要区别在于,浅复制只复制对象本身,而不复制它引用的对象。而深度复制会递归地复制对象及其引用的所有子对象,形成一个全新的、独立的数据结构。这对于那些具有复杂嵌套结构或...

    android 浅复制和深复制实例

    浅复制和深复制是两种主要的复制方式,它们在处理复杂数据结构时扮演着重要角色。本文将深入探讨这两种复制方式,并通过实例来帮助理解。 ### 1. 浅复制(Shallow Copy) 浅复制是指创建一个新对象,然后将原对象...

    原型模式测试浅复制和深复制(C++)

    下面我们将深入探讨原型模式、浅复制和深复制的概念及其在C++中的应用。 ### 原型模式 原型模式的基本思想是通过对象的克隆(clone)方法创建新对象。在C++中,我们可以自定义`clone()`方法来返回对象的一个副本。...

    Java中的深拷贝(深复制)和浅拷贝(浅复制) 示例代码

    为了理解深拷贝(深复制)和浅拷贝(浅复制),我们需要首先了解Java对象内存的分配方式以及引用的概念。 1. **对象复制的基础** 在Java中,当我们创建一个对象时,系统会在内存中为该对象分配一块空间,存储它的...

    Java中对象的深复制和浅复制详解.doc

    对象复制分为两种主要类型:浅复制(浅克隆)和深复制(深克隆)。理解这两种复制方式的区别对于优化程序性能和避免意外数据更改至关重要。 1. **浅复制(浅克隆)** 浅复制是指创建一个新对象,该对象拥有原始...

    java深复制浅复制的实现源代码

    本篇文章将深入探讨Java中的深复制和浅复制概念,并通过源代码示例进行详细解析。 首先,我们理解一下深复制和浅复制的区别: 1. **浅复制(Shallow Copy)**:浅复制只是复制了对象的引用,而不是对象本身。这...

    完整版复制目录模块.rar

    6. 深度复制与浅复制:深度复制会复制目录及其所有内容,而浅复制仅复制顶层目录,不包括子目录。根据需求选择适当的复制方式。 7. 进度显示:在复制大量文件时,提供进度条或百分比完成信息能提升用户体验。这通常...

    java List 深度复制方法

    当我们需要复制一个List时,可能会遇到浅复制和深复制的概念。浅复制只复制对象本身,而不复制它引用的对象,而深复制则会递归复制所有引用的对象。这篇博客将探讨如何在Java中对List进行深度复制。 首先,我们来...

    理解java中的深复制和浅复制

    在Java编程中,深复制和浅复制是两个重要的概念,主要涉及到对象的复制与克隆。这两个术语在处理对象的拷贝时具有不同的含义,理解它们对于编写高效且无误的代码至关重要。 首先,让我们来看一下浅复制(Shallow ...

    数组、字典深复制

    请注意,如果数组中的元素是自定义对象,这些对象必须支持`NSCopying`协议,否则复制可能会失败或只进行浅复制。 对于字典的深复制,可以使用`NSDictionary`或`NSMutableDictionary`的`mutableCopy`方法。这是因为...

Global site tag (gtag.js) - Google Analytics