c++深复制与浅复制区别代码示范vs2015txwtech

c++深复制与浅复制区别代码示范vs2015-txwtech

c++深复制与浅复制区别代码示范

区别:

深复制:

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面不会发生改变。

//--------深复制-----------复制构造函数
    CDemo(CDemo &obj1)
    {
        this->a = obj1.a;
        this->str = new char[1024];//用new关键字动态分配内存,就是深复制。
        if (str!=0)
        {
            strcpy(this->str,obj1.str);
        }
    }

浅复制:

因为调用是隐藏的,看不见的,默认的,自动生成的,复制构造函数。

CDemo B = A;

B.str[0] = 'K';//B对象里面的元素修改后,A里面一起发生改变。

//---------浅复制-----------复制构造函数
    CDemo(CDemo& obj)
    {
       this->a = obj.a;
       this->str = obj.str;//这句是浅复制
       
    }
    //在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech

//自己写了复制构造函数,必须写析构函数释放指针
————————————————
版权声明:本文为CSDN博主「txwtech」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/txwtech/article/details/103308170

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <iostream>
 3 
 4 
 5 using namespace std;
 6 class CDemo
 7 {
 8 public:
 9     CDemo(int pa, char *cstr)
10     {
11         this->a = pa;
12         this->str = new char[1024];//传递指针,必须使用new动态开辟一块空间
13         strcpy(this->str,cstr);
14 
15     }
16     //如下是隐藏的,看不见的,默认的,自动生成的,复制构造函数,这个是
17     
18     //---------浅复制-----------
19     //CDemo(CDemo& obj)
20     //{
21     //    this->a = obj.a;
22     //    this->str = obj.str;//这句是浅复制
23     //    
24     //}
25     //在测试时,分别屏蔽浅复制与深复制,查看结果。txwtech
26 
27     //写成深复制构造函数,自己写出来---
28 
29     //--------深复制-----------
30     CDemo(CDemo &obj1)
31     {
32         this->a = obj1.a;
33         this->str = new char[1024];//用new关键字动态分配内存,就是深复制。
34         if (str!=0)
35         {
36             strcpy(this->str,obj1.str);
37         }
38     }
39     //自己写了复制构造函数,必须写析构函数释放指针
40     ~CDemo()
41     {
42         delete str;
43     }
44     
45 
46 
47 public:
48     int a;
49     char *str;
50     
51 
52 //private:
53 
54 };
55 
56 
57 
58 int main()
59 {
60     CDemo A(10,"hello1");
61     cout << A.a << "," << A.str << endl;
62     CDemo B = A;
63     B.str[0] = 'K';//
64     //如果复制B.str="abcde";一个字符串,A的值不会变。
65     //cout << "修改B的一个字符后:B.str[0] = 'K';发现A的值一起变化了" << endl;
66     cout << "A.str is: " << A.str << endl;
67     
68     cout << "B.str is : " << B.str << endl;
69 
70     getchar();
71 
72     return 0;
73 }
74 
75 /*vs2015  严重性    代码    说明    项目    文件    行    禁止显示状态
76 //错误    C4996    'strcpy': This function or variable may be unsafe.Consider using strcpy_s instead.To //disable deprecation, use _CRT_SECURE_NO_WARNINGS.See online help for details.cc12a_demo    d : \users//\tt2018\documents\visual studio 2015\projects\cc12a_demo\cc12a_demo\cc12a_demo.cpp    11
77 1.放在#include语句之前,且即放在第一行,前面不能有注释,即真正的第一行;定义下面的宏:
78 
79 #define _CRT_SECURE_NO_WARNINGS或 #define _CRT_SECURE_NO_DEPRECATE
80 https://blog.csdn.net/Young__Fan/article/details/79829265
81 
82 //https://blog.csdn.net/txwtech/article/details/89765796 */
欢迎讨论,相互学习。 txwtech@163.com
原文地址:https://www.cnblogs.com/txwtech/p/11956960.html