【乾貨】share智能指針的模擬實現

    智能指針是C++實現自動內存管理的一種手段,本質是經過對象出做用域會自動析構,讓對象保存與所需管理的目標指針指向同一片動態開闢空間的地址,出做用域會自動析構。這裏模擬了,boost中的share智能指針,代碼以下:
ide

#pragma once
template<class T>
class SharePtr
{
public:
	SharePtr(T*ptr)
		:_ptr(ptr),
		_Rcount(new size_t(1))//引用計數解決拷貝構造與賦值運算符重載的問題
	{
	}
	~SharePtr()
	{
		if (--(*_Rcount))
		{
			delete _ptr;
			delete _Rcount;
		}
	}
	SharePtr(const SharePtr&ptr)
		:_ptr(ptr)
	{
		++(*_Rcount);
	}
	SharePtr& operator = (SharePtr ptr)
	{
		swap(_ptr, ptr._ptr);
		swap(_Rcount, ptr._Rcount);
		return *this;
	}
	T & operator * ()//使對象完成與指針相似的操做,在這裏重載了「*」、「->」的操做符
	{
		return *_ptr;
	}
	T * operator ->()
	{
		return _ptr;
	}
	size_t GetRefCount()
	{
		return *_Rcount;
	}
private:
	T *_ptr;
	size_t* _Rcount;
};

    若有不足,但願批評指正。
this

相關文章
相關標籤/搜索