共享指针shared_ptr

本文通过一个C++示例详细解析了智能指针std::shared_ptr的使用,包括引用计数的增加与减少过程,以及reset方法的影响。演示了当一个智能指针被复制后,两个指针如何共享同一资源并更新其引用计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <memory>
#include <iostream>

class A{
    public:
        ~A() {
            std::cout << "destroy A" << std::endl;  
        }

        int a;
};


int main() {
    std::shared_ptr<A> a(new A());
    std::shared_ptr<A> b = a;
    
    std::cout << "use count"<< a.use_count() << std::endl;
    std::cout << "use count"<< b.use_count() << std::endl;
    a.reset();
    std::cout << "use count"<< a.use_count() << std::endl;
    std::cout << "use count"<< b.use_count() << std::endl;

    if(a == nullptr)
        std::cout << "a is nullptr" << std::endl;
    else
        std::cout << "a is not nullptr" << std::endl;

    if(b == nullptr)
        std::cout << "b is nullptr" << std::endl;
    else
        std::cout << "b is not nullptr" << std::endl;
}

运行结果

use count2
use count2
use count0
use count1
a is nullptr
b is not nullptr
destroy A

总结:

  1. b=a; 指针a和指针b的use_count都等于2;
  2. 执行a.reset()后,虽然指针a所指向的内存还在,但是指针a本身已经为空了,所以它的use_count也为0;
  3. 执行a.reset()后,指针b的use_count变为1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值