模拟实现shared_ptr

来源:互联网 发布:网络渠道销售授权书 编辑:程序博客网 时间:2024/05/01 05:01
template<typename T>class my_SharedPtr{public:    my_SharedPtr(T* ptr = NULL);    ~my_SharedPtr();    my_SharedPtr(my_SharedPtr<T>& ptr);    my_SharedPtr<T>& operator=(my_SharedPtr<T>& ptr);private:    T* _ptr;    int* _pCount;};template<typename T>my_SharedPtr<T>::my_SharedPtr(T* ptr = NULL):_ptr(ptr){       if (NULL != ptr)    {        _pCount = new int(1);    }}template<typename T>my_SharedPtr<T>::~my_SharedPtr(){    if (--(*_pCount) == 0)    {        delete _ptr;        delete _pCount;        _ptr = NULL;        _pCount = NULL;    }}template<typename T>my_SharedPtr<T>::my_SharedPtr(my_SharedPtr<T>& ptr):_ptr(ptr._ptr),_pCount(ptr._pCount){    if (ptr._pCount != NULL)        ++(*_pCount);}template<typename T>my_SharedPtr<T>& my_SharedPtr<T>::operator=(my_SharedPtr<T>& ptr){    if (ptr._ptr != _ptr)    {        if (NULL == _ptr)        {            _ptr = ptr._ptr;            _pCount = ptr._pCount;        }        else        {            if (--(*_pCount) == 0)            {                delete _ptr;                delete _pCount;            }            _ptr = ptr._ptr;            _pCount = ptr._pCount;        }        if (NULL != _pCount)            ++(*_pCount);    }    return *this;}
0 0
原创粉丝点击