std::shared_ptr

本文对比了几种智能指针的特点,重点介绍了shared_ptr的工作原理及其使用场景。通过实例演示了引用计数机制,并展示了shared_ptr如何在不同情况下维持正确的引用计数。

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

/*auto_ptr:会发生语义转移,不支持应用计数
scoped_ptr:不支持复制,只有自己可以管理指针
scoped_array:支持数组
shared_ptr:最好的智能指针,支持引用计数,容器操作等,复制指针时引用计数加一,当复制的对象析构时引用计数减1,当引用计数为0是析构对象
*/

#include <memory>
#include <iostream>
using namespace std;
class shared
{
private:
    shared_ptr<int> p;
public:
    shared(shared_ptr<int> _p):p(_p){}
    void print()
    {
        cout << "count:" << p.use_count() << "v = " << *p << endl; 
    }
};

void print_func(shared_ptr<int> p)
{
    cout << "count:" << p.use_count() << "v = " << *p << endl; 
}//退出函数时,p自动析构,引用计数减1

int main()
{
    shared_ptr<int> p(new int(100));
    shared s1(p);
    {
        shared s2(p);
        s2.print();//3
    }
    s1.print();//2
    *p = 20;
    print_func(p);//3
    s1.print();//2
    getchar();
}
//我一直想知道shared_ptr和auto_ptr什么区别,现在总算清楚了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值