智能指针之 shared_ptr

shared_ptr是一个最像指针的“智能指针”,是boost.smart_ptr库中最有价值、最重要的组成部分,也是最有用的,Boost库的许多组件–甚至还包括其他一些领域的智能指针都使用了shared_ptr。抱歉,我实在想不出什么更恰当的词汇来形容它在软件开发中的重要性。再强调一遍,shared_ptr非常有价值、非常重要、非常有用。——《Boost程序库完全开发指南》

shared_ptr与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象。shared_ptr也可以安全地放到标准容器中,并弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷。

在C++历史上曾经出现过无数的引用计数型智能指针实现,但没有一个比得上boost::shared_ptr,在过去、现在和将来,它都是最好的。

shared_ptr的思想是,每当另一个智能指针指向该空间时,引用计数++,每当有智能指针更改指向时,引用计数–。这就意味着,有几个智能指针指向该空间,引用计数就是几,当引用计数大于2时,证明有2个以上的智能指针指向该空间,那么析构时,把智能指针赋空,不需释放空间。当且仅当引用计数为1时,即只有一个指针指向该空间,析构时才将指针赋空并释放空间,证明没有任何代码需要管理该空间,就把它释放掉。
引用计数的引入,解决auto_ptr和scoped_ptr不能解决的问题,它使得空间的释放更具有安全性。

shared_ptr的架构由四部分组成。

分别是class shared_ptr:

template<class _Ty>
class shared_ptr
{
    typedef shared_ptr<_Ty> this_type; 
public:
    shared_ptr():px(0){}
    shared_ptr(const shared_ptr<_Ty> &r):px(r.px),pn(r.pn){}
    shared_ptr(_Ty *p):px(p),pn(p){}

    shared_ptr<_Ty>& operator=(const shared_ptr<_Ty> &r)
    {
        if(this != &r)
        {
            this_type(r).swap(*this);
        }
    return *this;
    }
    ~shared_ptr()
public:
    _Ty& operator*()const
        {
  return *px;}
    _Ty* operator->()const
        {
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值