C++基础 - 智能指针 shared_ptr 的引用计数

智能指针shared_ptr的引用计数,详见代码及说明

    // shared_ptr的几种初始化方式
    shared_ptr<int> p1; // null
    shared_ptr<string> p2 = make_shared<string>(); // 非null, 调用string默认构造函数
    if(p2 && p2->empty()) {
        *p2 = "hello world";
    }
    shared_ptr<string> p4 = make_shared<string>("hello world"); // 非null

    // shared_ptr引用计数调试
    shared_ptr<int> p3 = make_shared<int>(100); // 非null,值初始化对象int(100)
    int p3count = p3.use_count();   // 1,初始化,引用计数为1

    shared_ptr<int> p5 = p3;
    p3count = p3.use_count();       // 2,被拷贝,引用计数+1
    int p5count = p5.use_count();   // 2,请思考

    shared_ptr<int> p6(p3);
    p3count = p3.use_count();       // 3,被拷贝,引用计数+1
    p5count = p5.use_count();       // 3,请思考
    int p6count = p6.use_count();   // 3,请思考

    p5 = make_shared<int>(10);
    p3count = p3.use_count();       // 2,请思考
    p5count = p5.use_count();       // 1,被赋予新的shared_ptr,引用计数为1
    p6count = p6.use_count();       // 2,请思考

    p6 = make_shared<int>(20);
    p3count = p3.use_count();       // 1,请注意
    p5count = p5.use_count();       // 1,请注意
    p6count = p6.use_count();       // 1,被赋予新的shared_ptr,引用计数为1

    p3 = make_shared<int>(30);      // 此时,引用计数递减为0,对象int(100)被释放
    p3count = p3.use_count();       // 1,请注意
    p5count = p5.use_count();       // 1,请注意
    p6count = p6.use_count();       // 1,被赋予新的shared_ptr,引用计数为1

C++ primer 中文版 (第五版) 12章

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值