SharedPtr:
1.利用引用计数来解决拷贝构造和赋值运算符重载的问题。
#pragma once
template<class T>
class SharedPtr
{
public:
SharedPtr()
:_ptr(NULL)
, _pCount(0)
{}
SharedPtr(T* ptr)
:_ptr(ptr)
,_pCount(new int(1))
{}
~SharedPtr()
{
/*if (--_pCount==0)
{
delete _ptr;
delete _pCount;
}*/
_Release();
}
SharedPtr(const SharedPtr<T>& sp)//拷贝构造
:_ptr(sp._ptr)
,_pCount(sp._pCount)
{
++(*_pCount);
}
SharedPtr& operator=(const SharedPtr<T> sp)
{
if (this != &sp)
{
this->_Release();
this->_ptr = sp._ptr;
++(*_pCount);
}
return *this;
}
protected:
void _Release()
{
if (--(*_pCount) == 0)
{
delete _ptr;
delete _pCount;
}
}
protected:
T* _ptr;
int* _pCount;
};
void TestSharedPtr()
{
SharedPtr<int> sp1(new int(1));
SharedPtr<int> sp2(sp1);
}