share_ptr简单实现

template<typename T>

class share_ptr {
private:
        //使用int *是为了每一个shared_ptr的count成员都指向同一个引用次数,每一个shared_ptr(绑定相同_ptr)操作的是同一个引用次数。
	int* count;//引用计数
	T* my_ptr; // 被封装的指针
public:
	//构造函数
	share_ptr(T* p)
		:count(new int(1)), my_ptr(p) {}
	~share_ptr() 
	{
		if (--*count == 0)
		{
			delete my_ptr;
			delete count;
		}
	}
	//
	int getRef() { return *count; }
	//运算符重载
	T* operator->() { return my_ptr; }
	T* operator*() { return *my_ptr; }

	//拷贝构造函数
	share_ptr(share_ptr<T>& other)
		:count(&(++*other.count)), my_ptr(other.my_ptr) {}
	
	share_ptr<T>& operator=(share_ptr<T>& other)
	{
		++* other.count; //复制的引用对象的计数增加
		//被赋值对象存在引用对象,且计数为1(更换引用对象后,清除之前的)
		if (this->my_ptr && 0 == -- * this->count)
		{
			delete count;
			delete _ptr;
		}
		this->my_ptr = other.my_ptr;
		this->count = other.count;
		return *this;
	}
};
原文地址:https://www.cnblogs.com/EvansPudding/p/12764905.html