实现一个简单的shared_ptr

Posted yohaha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现一个简单的shared_ptr相关的知识,希望对你有一定的参考价值。

template <typename T>
class shared_ptr
{
public:
    explicit shared_ptr (T *ptr): mPtr(ptr), cnt(new int(1)){}
    shared_ptr(const shared_ptr& rhs): mPtr(rhs.mPtr), cnt(rhs.cnt){ ++*cnt; }
    shared_ptr& operator = (const shared_ptr&);
    ~shared_ptr();

    T& operator *() { return *mPtr; }
    T* operator -> () { return mPtr; }
    void reset(T* ptr);
    T* get() const { return mPtr; }
private:
    T* mPtr;
    int *cnt;
};
template <typename T>
shared_ptr<T>& shared_ptr<T>::operator=(const shared_ptr& rhs)
{
    if (this == &rhs)
        return *this;
    --*cnt;
    if (*cnt == 0)
    {
        delete mPtr;
        delete cnt;
    }
    cnt = rhs.cnt;
    ++*cnt;
    mPtr = rhs.mPtr;
    return *this;
}
template <typename T>
void shared_ptr<T>::reset(T* ptr)
{
    --*cnt;
    if (*cnt == 0)
    {
        delete mPtr;
        delete cnt;
    }
    cnt = new int(1);
    mPtr = ptr;
}
template <typename T>
shared_ptr<T>::~shared_ptr()
{
    --*cnt;
    if (*cnt == 0)
    {
        delete mPtr;
        delete cnt;
    }
}

 

以上是关于实现一个简单的shared_ptr的主要内容,如果未能解决你的问题,请参考以下文章

C++ 简单实现shared_ptr

智能指针基本原理,简单实现,常见问题

shared_ptr智能指针模板类的简单实现(c++11)

代码片段 - Golang 实现简单的 Web 服务器

shared_ptr智能指针模板类的简单实现(c++11)

网易面试题如何实现一个线程安全的shared_ptr智能指针