智能指针的简单分析(三)——unique_ptr

本文介绍了一个自定义的智能指针类MyUniquePtr的实现细节,该类使用模板设计并支持删除器,提供了资源独占管理的功能,包括移动构造与赋值等特性。

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

忽略了释放函数的,但是不妨碍理解主要实现

template<typename Ty, typename Dy = nullptr_t>
class MyUniquePtr
{
    typedef typename Ty* MyPointer;
    typedef typename Dy MyDeleter;
    typedef MyUniquePtr<Ty, Dy> MyObj;
private:
    MyPointer m_ptPointer;
    MyDeleter m_deleter;
public:
    MyUniquePtr() : m_ptPointer(nullptr) {};
    MyUniquePtr(MyPointer p) :m_ptPointer(p) {};
    MyUniquePtr(const MyObj& other) = delete;
    MyUniquePtr& operator= (const MyObj& other) = delete;
    MyUniquePtr(MyUniquePtr&& other)
    {
        this->m_ptPointer = other.m_ptPointer;
        this->m_deleter = other.m_deleter;
         
        other.m_ptPointer = nullptr;
        other.m_deleter = nullptr;
    };
    MyUniquePtr& operator=(MyObj&& other)
    {
        this->m_ptPointer = other.m_ptPointer;
        this->m_deleter = other.m_deleter;
        other.m_ptPointer = nullptr;
        other.m_deleter = nullptr;
        return *this;
    }
    ~MyUniquePtr() { free();}
    MyPointer get() { return m_ptPointer; }
    MyDeleter get_deleter() { return m_deleter; };
    MyPointer release() 
    { 
        auto pTemp = m_ptPointer;
        m_ptPointer = nullptr;
        return pTemp;
    }
    void reset(MyPointer p = nullptr)
    {
        free();
        m_ptPointer = p;
    }
    void swap(MyObj& other)
    {
        auto ptPointer_Temp = other.get();
        auto deleter_Temp = other.get_deleter();
        other.m_ptPointer = get();
        other.m_deleter = get_deleter();
        m_ptPointer = ptPointer_Temp;
        m_deleter = deleter_Temp;
    }
    MyPointer operator->() { return m_ptPointer; }
    operator bool() { return m_ptPointer != nullptr; }
private:
    void free()
    {
        if (m_ptPointer != nullptr)
        {
            delete m_ptPointer;
            m_ptPointer = nullptr;
        }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值