【干货】share智能指针的模拟实现

    智能指针是C++实现自动内存管理的一种手段,本质是通过对象出作用域会自动析构,让对象保存与所需管理的目标指针指向同一片动态开辟空间的地址,出作用域会自动析构。这里模拟了,boost中的share智能指针,代码如下:

#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;
};

    如有不足,希望批评指正。

本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1753276

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值