手写弱指针


/// @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_; }
};

已发布

分类

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注