#include<iostream>
using namespace std;
template<class T>
class SmartPtr
{
public:
SmartPtr(T *p) :_ptr(p), _pCount(new int(1))
{}
~SmartPtr()
{
release();
}
SmartPtr(SmartPtr &s)
{
_ptr = s._ptr;
_pCount = s._pCount;
++_pCount[0];
}
SmartPtr& operator=(SmartPtr &s)
{
this->release();
_ptr = s._ptr;
_pCount = s._pCount;
++_pCount[0];
}
int GetCount()
{
//cout << *_pCount << endl;
return *_pCount;
}
T* Get()
{
return _ptr;
}
T* operator->()//获取原生指针
{
return _ptr;
}
T& operator*()
{
return *_ptr;
}
protected:
void release()
{
if ((--*_pCount == 0) && _ptr)
{
cout << "release" << _ptr << endl;
delete _pCount;
delete _ptr;
_pCount = NULL;
_ptr = NULL;
}
}
private:
T* _ptr;
int *_pCount;
};
void Test()
{
SmartPtr<int> sp1(new int);
{
SmartPtr<int> sp2(sp1);
cout << "sp1:_pCount:" << sp1.GetCount() << endl;
cout << "sp2:_pCount:" << sp2.GetCount() << endl;
}
cout << "sp1:_pCount:" << sp1.GetCount() << endl;
}
int main()
{
Test();
return 0;
}
引用计数型智能指针
最新推荐文章于 2022-07-26 17:44:34 发布