• 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
  • 相关阅读:
    在线加密解密
    ctcms Nginx 伪静态
    iTem2 保持连接,解决ssh的"Write failed: Broken pipe"问题
    打开窗口弹出页面
    点击弹窗
    javascript 技巧
    使用Chrome工具来分析页面的绘制状态
    jquery结合JSONP教程—明河谈jquery
    使用 JSONP 实现跨域通信,第 1 部分: 结合 JSONP 和 jQuery 快速构建强大的 mashup
    jsonp详解
  • 原文地址:https://www.cnblogs.com/txwtech/p/11956960.html
Copyright © 2020-2023  润新知