美文网首页
C++复习(深拷贝与浅拷贝)

C++复习(深拷贝与浅拷贝)

作者: bluewind1230 | 来源:发表于2018-01-29 11:50 被阅读0次

当出现类的等号赋值时,即会调用拷贝函数

深拷贝与浅拷贝区别:

  • 在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的;
但是当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象,所以,此时,必须采用深拷贝
  • 深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。简而言之,当数据成员中有指针时,必须要用深拷贝。
深拷贝:

指的就是当拷贝对象中有对其他资源(如堆、文件、系统等)的引用时(引用可以是指针或引用)时,对象的另开辟一块新的资源,而不再对拷贝对象中有对其他资源的引用的指针或引用进行单纯的赋值。如:

#include "stdafx.h"

class A
{
public:
    A(int _size) : size(_size)
    {
        data = new int[size];//1th
        printf("调用构造\n");
    } // 假如其中有一段动态分配的内存 
    A() {};
    A(const A& _A) : size(_A.size)
    {
        data = new int[size];//2th
        printf("调用拷贝构造\n");

    } // 深拷贝 
    ~A()
    {
        delete[] data;//3th
        printf("调用析构\n");
    } // 析构时释放资源
private:
    int* data;
    int size;
};
int main()
{
    A a(5), b = a; // 0th
    return 0;
}

过程分析:
0th-->1th(此时查看其内存)


image.png

继续,走到了2th这里:


image.png
第一次走到3th这里:
image.png
第二次走到3th这里(对1th处的data进行处理):
image.png image.png

相关文章

  • [C++之旅] 15 深拷贝与浅拷贝

    [C++之旅] 15 深拷贝与浅拷贝 拷贝构造函数分为深拷贝和浅拷贝两种方式 浅拷贝只是将被拷贝的对象的成员直接赋...

  • c/c++/c++11 浅拷贝和深拷贝

    目录 1 c++拷贝 1.1 拷贝构造函数1.2 浅拷贝1.3 深拷贝 2 c语言拷贝 2.1 浅拷贝2.2 深拷...

  • C++复习(深拷贝与浅拷贝)

    当出现类的等号赋值时,即会调用拷贝函数 深拷贝与浅拷贝区别: 在未定义显示拷贝构造函数的情况下,系统会调用默认的拷...

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • 9总 函数的基础

    复习: 列表,字典,元祖,集合 1.浅拷贝和深拷贝: import copy copy.copy(对象):浅拷贝 ...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • 深拷贝和浅拷贝

    干货!深拷贝和浅拷贝的区别 深拷贝才是拷贝,浅拷贝就是Retain Copy与Retain的区别 Copy: 根据...

  • js浅拷贝、深拷贝

    前言 本文主要简单讲一下什么是浅拷贝、什么是深拷贝、深拷贝与浅拷贝的区别,以及怎么进行深拷贝和怎么进行浅拷贝。 一...

网友评论

      本文标题:C++复习(深拷贝与浅拷贝)

      本文链接:https://www.haomeiwen.com/subject/qacxzxtx.html