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

C++之深拷贝与浅拷贝的区别,第1张

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;
           }
       }
};

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1295234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存