• 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的地址空间,和前面的对象共用一个内存块
    后期的修改会导致两个对象的内容都被修改

  • 相关阅读:
    nginx rewrite参数 以及 $1、$2参数解析(附有生产配置实例)
    JSP命令标签 静态包含/动态包含
    nrf52832 ADC的配置
    一文梳理Vue面试题
    Demo 题记
    pojo之vo_dto_po的一些理解
    IPQ6010-Fast, reliable and secure wireless connectivity
    网络通信基础
    ICDE2023 | VEND:基于点编码的边存在性判定
    nodejs+vue+elementui英语单词学习网站python java
  • 原文地址:https://blog.csdn.net/wei242425445/article/details/126728723