shared_ptr
using namespace std;
shared_ptr<int> sp1 = make_shared<int>(1);
cout << sp1.use_count() << endl;
{
shared_ptr<int> sp2(sp1);
//关键在里面的count是一个指针,不管多少个share_ptr都引用一块count内存,他的count都是第一个share_ptr分配的,一份的。
cout << sp1.use_count() << endl;
cout << sp2.use_count() << endl;
}
cout << sp1.use_count() << endl;
cout << "end" << endl;
实现原理
template <class T>
class shared_ptr
{
public:
shared_ptr(T* ptr)
: _ptr(ptr)
, _pCount(new int(1))
{}
shared_ptr(const shared_ptr& sp)
{
_ptr = sp._ptr;
_pCount = sp._pCount;
++* _pCount;
}
shared_ptr<T>& operator=(const shared_ptr<T>& sp)
{
if (_ptr != sp._ptr)
{
if (--(*_pCount) == 0)
{
delete _ptr;
delete _pCount;
}
_ptr = sp._ptr;
_pCount = sp._pCount;
++* _pCount;
}
return *this;
}
~shared_ptr()
{
if (--(*_pCount) == 0 && _ptr != nullptr)
{
delete _ptr;
delete _pCount;
}
}
private:
T* _ptr;
int* _pCount;
};