栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++之深拷贝与浅拷贝的区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++之深拷贝与浅拷贝的区别

1.什么拷贝构造函数?

同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完全可行的。

这个拷贝过程只需要拷贝数据成员,而函数成员是共用的(只有一份拷贝)。在建立对象时可用同一类的另一个对象来初始化该对象的存储空间,这时所用的构造函数称为拷贝构造函数。

2.深拷贝与浅拷贝的区别?

首先简单的理解就是:

假如B复制A,如果改变A,则B也被改变,就是浅拷贝

假如B复制A,A改变,则B不变,就是深拷贝。

更深层的理解:

对于浅拷贝来说,只是增加了一个指针指向已经存在的内存。当浅拷贝复制引用属性时,仅仅复制指针值,没有复制指向的对象。

 对于深拷贝来讲,它完成复制一份该属性指向的对象。即就是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向新的内存。

 接下来通过代码展示深拷贝和浅拷贝的区别:

#include

class Mystring
{
 private:
       char* str;
 public:

      Mystring(const Mystring& ms):str(ms.str) //浅拷贝
      {}       

       Mystring(const char* p=nullptr):str(nullptr)  //深拷贝
       {
           if(p!=nullptr)
           {
              int len=strlen(p)+1;
              str=new char[len];    //使用new申请内存空间
              strcpy_s(str,len,p);
            }
        } 

       ~Mytring()  //析构函数
       {
           if(str!=nullptr)  
           {
                delete []str;
           }
       }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号