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

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

 

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

 

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

 

🎈如下图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();
}
复制代码

🎈深拷贝解决问题

🎈观察结构则不再影响

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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———————

 

posted @   日落悬崖  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示