C++基础 -15- 拷贝构造(深度拷贝)

发布时间 2024-01-03 08:51:30作者: 日落悬崖

———————拷贝构造———————

 

?由于系统的浅拷贝就是直接赋值

 

?所以可能出现共用内存空间的情况

 

?如下图newperson通过浅拷贝创建出来

 

?改变newperson的参数影响到了person类

 

 

#include "iostream"

using namespace std;

extern "C"
{
#include "string.h"
}
class base
{
public:
    base(char const *name)
    {
        addr = new char[1024];
        strcpy(addr, name);
    }
    void show()
    {
        cout << addr << endl;
    }
    void setname(const char *name)
    {
        strcpy(addr, name);
    }

private:
    char *addr;
};
int main()
{
    base person("rlxy");
    person.show();
    base newperson = person;
    newperson.setname("xyrl");
    person.show();
}

?深拷贝解决问题

?观察结构则不再影响

 

 

#include "iostream"

using namespace std;

extern "C"
{
#include "string.h"
}
class base
{
public:
    base(char const *name)
    {
        addr = new char[1024];
        strcpy(addr, name);
    }
    base(base &a)
    {
        char *addr = new char[1024];
        strcpy(addr, a.addr);
    }
    void show()
    {
        cout << addr << endl;
    }
    void setname(const char *name)
    {
        strcpy(addr, name);
    }

private:
    char *addr;
};
int main()
{
    base person("rlxy");
    person.show();
    base newperson = person;
    newperson.setname("xyrl");
    person.show();
}

———————End———————