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

  • 相关阅读:
    分时函数解决一次性加载大量dom造成的卡顿假死
    Cookie与Session
    懒惰型性格分析,如何改变懒惰型性格?
    中台框架模块开发实践-代码生成器的添加及使用
    pod(一):Kubernetes(k8s)创建pod的两种方式
    [附源码]SSM计算机毕业设计中青年健康管理监测系统JAVA
    【C语言】模拟实现字符串函数(下)
    让GPT回复图片的咒语
    vue2.x源码刨析-new Vue的时候做了什么(手写简易版01)
    从html radio到android RadioButton
  • 原文地址:https://blog.csdn.net/wei242425445/article/details/126728723