2023年7月4日
手写弱指针
/// @brief 手写弱指针/// @tparam T 指针内存类型template <class T>class weak_ptr_t {private: int* count_; T* ptr_;
public: /// @brief 弱指针构造函数 /// @param ptr 传入的指针 weak_ptr_t(T* ptr = nullptr) : count_(nullptr), ptr_(nullptr) {} /// @brief 拷贝构造函数,需要搭配手写shared_ptr_t使用,获取共享指针的count指针和ptr指针 /// @param sp 传入的指针 weak_ptr_t(shared_ptr_t<T>& sp) : count_(sp.count()), ptr_(sp.get()) {} /// @brief 赋值函数 /// @param sp 传入的指针 /// @return weak_ptr_t<T>& weak_ptr_t<T>& operator=(shared_ptr_t<T>& sp) { count_ = sp.count(); ptr_ = sp.get(); return *this; } /// @brief lock函数 /// @return 若引用计数大于0,返回指针,否则返回空指针 T* lock() { if (count_ && *count_ > 0) { return ptr_; } return nullptr; } /// @brief 获取引用计数 /// @return int 引用计数 int use_count() { return *count_; } /// @brief 获取引用计数指针 /// @return int* 引用计数指针 int* count() { return count_; }};