C++实现智能指针

 

C++11增加了智能指针:shared_ptr、unique_ptr、weak_ptr

为了加深理解,自己实现智能指针

我们都知道shared_ptr的核心思想通过引用计数来管理内存

先实现单个指针的自我管理,看下面

template <class T>
class Ref
{
public:
    Ref() : m_ptr(NULL)
    {
    }

    Ref(T* p) : m_ptr(p) 
    {
        if (m_ptr)m_ptr->AddRef();
    }

    Ref(const Ref<T>& r) : m_ptr(r.m_ptr) 
    {
        if (m_ptr)m_ptr->AddRef();
    }

    template <typename U>
    Ref(const Ref<U>& r) : m_ptr(r.get())
    {
        if (m_ptr) m_ptr->AddRef();
    }

    ~Ref()
    {
        if (m_ptr) m_ptr->Release();
    }

    T* get() const { return m_ptr; }
    operator T*() const { return m_ptr; }
    T* operator->() const { return m_ptr; }


    T* release() 
    {
        T* retVal = m_ptr;
        m_ptr = NULL;
        return retVal;
    }

    Ref<T>& operator=(T* p) 
    {
        if (p) p->AddR
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值