• C++对象的拷贝


    测试代码

    #include 
    
    #include 
    #include 
    #include 
    
    struct Leg
    {
      int number{0};
      int color{0};
    };
    
    class Cat
    {
    public:
      std::list _intdata;
      std::shared_ptr leg;
    };
    
    int main()
    {
      Cat cat;
      cat._intdata.push_back(23);
      cat._intdata.push_back(40);
      cat.leg = std::make_shared();
      cat.leg->color = 100;
      cat.leg->number = 200;
    
      std::cout<<"init cat data: "<number<number<number = 1666;
      dog._intdata.push_back(488);
      std::cout<<"init cat data: "<number<number<
    • 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
    • 42
    • 43
    • 44
    • 45

    输出结果

    init cat data: 2
    init cat num: 200
    init dog data: 2
    init dog num: 200
    init cat num: 1666
    init dog num: 1666
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    结论

    队列

    Cat dog = cat;
    新建内存空间_intdata的数据被拷贝到新的内存空间
    后期的修改dog._intdata.push_back(488)不会影响前面的内存空间

    指针

    Cat dog = cat;
    新建内存空间只是增加了leg的地址空间,和前面的对象共用一个内存块
    后期的修改会导致两个对象的内容都被修改

  • 相关阅读:
    Linux 常用命令
    通过隧道功能在安全标准较高的情况下访问Linux
    基于tensorflow的cnn文本分类
    [kruskal]Darnassus 2022杭电多校第8场 1007
    VTK可拖动三维坐标系
    引入移码的目的
    【云原生】SpringCloud-Spring Boot Starter使用测试
    Spring框架-AspectJ配置文件
    QT入门知识回顾
    如何从戴尔笔记本电脑硬盘恢复数据
  • 原文地址:https://blog.csdn.net/wei242425445/article/details/126728723