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

  • 相关阅读:
    python gdal警告Warning无法关闭
    mysql大表数据删除
    docker 其他命令(镜像和容器常用命令外的命令)
    [CTF] 2018-百越杯-Misc-血小板天下第一可爱
    Nginx + Tomcat 搭建负载均衡、动态分离
    3S技术在水文、气象、灾害、生态、环境及卫生等领域应用
    【MAPBOX基础功能】13、mapbox点击线图层高亮指定的线段
    最短路径算法-迪杰斯特拉(Dijkstra)算法在c#中的实现和生产应用
    Oracle/PLSQL: Sin Function
    【三维目标检测】PointRCNN(二)
  • 原文地址:https://blog.csdn.net/wei242425445/article/details/126728723