码迷,mamicode.com
首页 > 编程语言 > 详细

c++深拷贝和浅拷贝

时间:2015-08-19 20:26:30      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:深拷贝   浅拷贝   

默认复制构造函数可以完成对象的数据成员值简单的复制
对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>
using namespace std;

class  Name
{
public:
    Name(const char *myp)
    {
        m_len = strlen(myp);
        m_p =(char *) malloc(m_len + 1); //
        strcpy(m_p, myp);
    }

    //Name obj2 = obj1;
    //解决方案: 手工的编写拷贝构造函数 使用深copy
    Name(const Name& obj1)
    {
        m_len = obj1.m_len;
        m_p = (char *)malloc(m_len + 1);
        strcpy(m_p, obj1.m_p);
    }

    ~Name()
    {
        if (m_p != NULL)
        {
            free(m_p);
            m_p = NULL;
            m_len = 0;
        }
    }
protected:
private:
    char *m_p ;
    int m_len; 
};


void objplaymain()
{
    Name obj1("abcdefg");
    //Name obj2 = obj1;  //C++编译器提供的 默认的copy构造函数  浅拷贝
    Name obj3("obj3");

    obj3 = obj1;  // C++编译器提供的 等号操作 也属 浅拷贝
}

void main91()
{
    objplaymain();
    cout<<"hello..."<<endl;
    system("pause");
    return ;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

c++深拷贝和浅拷贝

标签:深拷贝   浅拷贝   

原文地址:http://blog.csdn.net/sjtu_chenchen/article/details/47786071

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!