zoukankan      html  css  js  c++  java
  • c++——深拷贝和浅拷贝

    深拷贝和浅拷贝

    • 默认复制构造函数可以完成对象的数据成员值简单的复制
    • 浅拷贝只拷贝指针的地址值,不拷贝地址所指向的数

    1浅拷贝问题

    1、c++默认的拷贝构造函数

    2、=号操作符

    都是浅拷贝

    2浅拷贝程序C++提供的解决方法

    自己手动编写拷贝构造函数(使用深拷贝),不使用c++默认的拷贝构造函数。

    显示提供copy构造函数

    显示操作重载=号操作,不使用编译器提供的浅copy

    class Name

    {

    public:

             Name(const char *pname)

             {

                       size = strlen(pname);

                       pName = (char *)malloc(size + 1);

                       strcpy(pName, pname);

             }

             Name(const Name &obj)

             {

                       //用obj来初始化自己

                       pName = (char *)malloc(obj.size + 1);

                       strcpy(pName, obj.pName);

                       size = obj.size;

             }

             ~Name()

             {

                       cout<<"开始析构"<<endl;

                       if (pName!=NULL)

                       {

                                free(pName);

                                pName = NULL;

                                size = 0;

                       }

             }

             void operator=(Name &obj3)

             {

                       if (pName != NULL)

                       {

                                free(pName);

                                pName = NULL;

                                size = 0;

                       }

                       cout<<"测试有没有调用我。。。。"<<endl;

                       //用obj3来=自己

                       pName = (char *)malloc(obj3.size + 1);

                       strcpy(pName, obj3.pName);

                       size = obj3.size;

             } 

    protected:

    private:

             char *pName;

             int size;

    };

    //对象的初始化 和 对象之间=号操作是两个不同的概念

    void playObj()

    {

             Name obj1("obj1.....");

             Name obj2 = obj1; //obj2创建并初始化

             Name obj3("obj3...");

             //重载=号操作符

             obj2 = obj3; //=号操作

             cout<<"业务操作。。。5000"<<endl;

    }

    void main61()

    {

             playObj();

             system("pause");

    }

     
     
  • 相关阅读:
    bzoj1934 Vote 善意的投票 最小割(最大匹配)
    poj3417 Network 树上差分+LCA
    bzoj1076 奖励关 期望dp
    bzoj1087 互不侵犯King 状压dp+bitset
    bzoj1041 圆上的整点 数学
    bzoj 1085骑士精神 迭代深搜
    CodeForces 1043D Mysterious Crime 区间合并
    2018.12.14 浪在ACM 集训队第九次测试赛
    2018.12.9 中国石油大学第四次新生训练赛题解
    2018.12.8 中国石油大学第三次新生训练赛题解
  • 原文地址:https://www.cnblogs.com/long5683/p/9775120.html
Copyright © 2011-2022 走看看