• shared_ptr


    引用对象+1的情况

    初始化一个

    auto pPlayer = make_shared<Player>();
    
    • 1

    作为实参传递

    auto p1(pPlayer);
    
    • 1

    作为函数返回值

    shared_ptr pFunction(shared_ptr<Player>&)auto p2 = pFunction(p1);
    
    • 1
    • 2

    shard_ptr若在pFunction里初始化且没有变量来接它的返回值,则生命周期结束引用计数会-1

    p1指向新的对象,pPlayer、p2指向的对象的计数-1,计数为0则shared_ptr的内存释放

    在函数里作为形参传递,超出函数的作用域则计数-1

    use_count()

    返回shared_ptr的引用计数,
    unique()返回是否use_count() == 1

    reset

    reset不带参数
    auto pPlayer = make_shared();
    若shared_ptr初始化的指针pPlayer是指向该对象的唯一指针,则reset释放所指向的对象,并且把pPlayer指针指向空。
    若不是指向该对象的唯一指针,则指向该对象的引用计数-1,并且把指针置为空。

    若reset有参数

    若pPlayer是 唯一指向该对象的指针,则释放pPlayer指向的对象,让pPlayer指向新对象。
    若pPlayer不是唯一指向该对象的指针,则指向该对象的引用计数-1,让pPlayer指向新对象。

    可以通过reset来初始化shared_ptr

    解引用*pPlayer

    获得pPlayer所指向的对象。

    get()函数

    如pPlayer.get()返回的是内置存储的指针Player的对象

    swap();

    用pPlayer再实例化一个shared_ptr对象,命名为pPlayer2
    可以写swap(pPlayer, pPlayer2)也可以写pPlayer.swap(pPlayer2);
    给pPlayer传入一个年龄为2,pPlayer2传入10,通过打印所指向对象的年龄可以看出,调用swap交换了两者所指向的对象。

    = nullptr

    将所指向的对象的引用计数-1,若引用计数为0,则智能指针释放指针所指向的对象
    把智能指针置为空

    shared_ptr作为判断条件,如

    if(pPlayer) { // TODO  }
    
    • 1

    自定义删除器

    void myDelete(int  *p) { delete p; }
    shared_ptr<int> p(new int(12345),  myDelete);
    
    • 1
    • 2

    shared_ptr管理动态数组的时候则需要自定义删除器
    也可以default_delete,如shared_ptr (new Player[10], std::default_delete());
    一种不用自定义删除器的写法shared_ptr p(new Player[]);

    ————————————————————————————————————————

    后续待补充。。。。

  • 相关阅读:
    【剑指Offer】14.剪绳子
    React 开发必须知道的 34 个技巧【近1W字】
    猿创征文|风起YuKon(禹贡)-空间数据库结缘数字孪生和实景三维建设
    基于微信小程序便民服务系统(微信小程序毕业设计)
    7-Zip怎么设置字典大小 单词大小 固实数据大小,把大文件9.35G压缩成小1.56G
    Python类中的property的用法
    如何解决kafka rebalance导致的暂时性不能消费数据问题
    一个用java的get请求
    Unity ECS小知识1 - PhysicsTrigger Event
    POI实现Excel导入和导出(源码测试)
  • 原文地址:https://blog.csdn.net/alodonoa/article/details/126070032