非c++1x实现UniquePtr

原创
2019/10/23 12:15
阅读数 70
#ifndef UNIQUEPTR_H
#define UNIQUEPTR_H

template<typename _T>
struct default_delete
{
    void operator()(_T *ptr)
    {
        delete ptr;
    }
};

template<typename _T, typename _D = default_delete<_T> >
class UniquePtr
{
public:
    UniquePtr(_T *ptr = NULL)
    {
        _ptr = ptr;
    }

    ~UniquePtr()
    {
        reset();
    }

    // Move constructor
    UniquePtr(const UniquePtr<_T,_D> &u)
    {
        _ptr = u.release();
    }

    // Move assignment operator
    UniquePtr<_T,_D>& operator=(const UniquePtr<_T,_D> &rhs)
    {
        reset(rhs.release());
        return *this;
    }

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

    _T& operator*() const
    {
        return *get();
    }

    void reset(_T *ptr = NULL)
    {
        _deleter(_ptr);
        _ptr = ptr;
    }

    void swap(UniquePtr<_T,_D> &r)
    {
        _T *t = _ptr;
        _ptr = r._ptr;
        r._ptr = t;
    }

    _T* release() const
    {
        _T *t = _ptr;
        _ptr = NULL;
        return t;
    }

    _T* get() const
    {
        return _ptr;
    }

private:
    mutable _T *_ptr;
    _D _deleter;
};

#endif

 

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部