// 智能指针
template<class T>
class SharedPtr {
private:
T* _ptr;
int* _count;
public:
SharedPtr(T* ptr = nullptr) : _ptr(ptr), _count(new int(1)) {}
SharedPtr(const SharedPtr<T>& s) : _ptr(s._ptr), _count(s._count)
{
(*count)++;
}
~SharedPtr()
{
(*_count)--;
if (*_count == 0)
{
delete _ptr;
_ptr = nullptr;
delete _count;
_count = nullptr;
}
}
T& operator*()
{
return *_ptr;
}
T* operator -> ()
{
return _ptr;
}
SharedPtr<T>& operator=(const SharedPtr<T>& s)
{
if (this != &s)
{
if (--(*_count) == 0)
{
delete this->_count;
delete this->_ptr;
}
_ptr = s._ptr;
_count = s._count;
(*_count)++;
}
return *this;
}
};
shared_ptr实现
最新推荐文章于 2022-09-27 15:15:15 发布