61、手写实现智能指针类

template<typename T> 

class SharedPtr {

 private:

 size_t* m_count_; _

_T* m_ptr_; 

public: 

//构造函数 

SharedPtr(): m_ptr_(nullptr),m_count_(new size_t) {} 

SharedPtr(T* ptr): m_ptr_(ptr),m_count_(new size_t) { m_count_ = 1;}

 //析构函数 

~SharedPtr() { 

-- (*m_count_);*

 if (*m_count_ == 0) { 

delete m_ptr_; _

_delete m_count_;

 m_ptr_ = nullptr; 

m_count_ = nullptr; 

}

 } 

//拷⻉构造函数

 SharedPtr(const SharedPtr& ptr) {

 m_count_ = ptr.m_count_; _

_m_ptr_ = ptr.m_ptr_;_

 ++(*m_count_); _*

*_} _*

//拷⻉赋值运算 

void operator=(const SharedPtr& ptr) { SharedPtr(std::move(ptr)); } 

//移动构造函数 

SharedPtr(SharedPtr&& ptr) : m_ptr_(ptr.m_ptr_), 

m_count_(ptr.m_count_) { ++(*m_count_); }

//移动赋值运算
void  operator=(SharedPtr&&  ptr)  {  SharedPtr(std::move(ptr));  }
//解引⽤
T&  operator*()  {  return  *m_ptr_;  }
//箭头运算
T*  operator->()  {  return  m_ptr_;  }
//⃞载bool操作符
operator  bool()  {return  m_ptr_  ==  nullptr;}
T*  get()  {  return  m_ptr_;}
size_t  use_count()  {  return  *m_count_;}
bool  unique()  {  return  *m_count_  ==  1;  }
void  swap(SharedPtr&  ptr)  {  std::swap(*this ,  ptr);  }
};

Last updated