/// @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_; }
};
手写弱指针
来自
标签:
发表回复