share_ptr 引用计数的实现

本文深入探讨了C++标准库中的智能指针概念,特别关注了tr1提供的share_ptr。通过分享实例代码,详细解释了如何使用引用计数来管理资源所有权,避免了传统指针可能引发的内存泄漏问题。

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

        智能指针在c++标准库中提供了auto_ptr,但是,只允许一个有一个实例指向资源,但有些时候这样子是不符合需求的,在tr1中提供了一个新的共享智能指针,share_ptr,其中使用了引用计数。以下是简单的实现。


template <typename _Ty>
class kshare_ptr
{
public:
    kshare_ptr(_Ty* _t = NULL)
        : m_Ty(_t)
    {
        m_pRef = new size_t(1);
    }

    ~kshare_ptr()
    {
        --*m_pRef;
        if (*m_pRef == 0)
        {
            delete m_pRef;
            m_pRef = NULL;

            delete m_Ty;
            m_Ty = NULL;
        }
    }

    kshare_ptr(const kshare_ptr<_Ty>& _rhs)
    {
        m_pRef = _rhs.m_pRef;
        ++*m_pRef;
        m_Ty = _rhs.m_Ty;
    }

    kshare_ptr& operator=(const kshare_ptr<_Ty>& _rhs)
    {
        if (this == &_rhs)
        {
            return *this;
        }

        --*m_pRef;
        if (m_pRef == 0)
        {
            delete this;
        }
        
        ++*_rhs.m_pRef;
        m_Ty = _rhs.m_Ty;

        return *this;
    }

public:
    _Ty*                m_Ty;
    size_t*             m_pRef;
};




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值