美文网首页
智能指针简单实现

智能指针简单实现

作者: Youzhicha | 来源:发表于2023-11-27 13:59 被阅读0次

    unique_ptr实现示例

    template <typename T>
    class unique_ptr {
    public:
        // 默认构造函数
        unique_ptr() noexcept : ptr_(nullptr) {}
    
        // 构造函数,接受一个指针
        explicit unique_ptr(T* ptr) noexcept : ptr_(ptr) {}
    
        // 析构函数
        ~unique_ptr() {
            delete ptr_;
        }
    
        // 禁用拷贝构造函数和拷贝赋值操作符
        unique_ptr(const unique_ptr&) = delete;
        unique_ptr& operator=(const unique_ptr&) = delete;
    
        // 移动构造函数
        unique_ptr(unique_ptr&& other) noexcept : ptr_(other.ptr_) {
            other.ptr_ = nullptr;
        }
    
        // 移动赋值操作符
        unique_ptr& operator=(unique_ptr&& other) noexcept {
            if (this != &other) {
                delete ptr_;
                ptr_ = other.ptr_;
                other.ptr_ = nullptr;
            }
            return *this;
        }
    
        // 重置指针
        void reset(T* ptr = nullptr) noexcept {
            delete ptr_;
            ptr_ = ptr;
        }
    
        // 获取指针
        T* get() const noexcept {
            return ptr_;
        }
    
        // 访问对象的成员操作符
        T* operator->() const noexcept {
            return ptr_;
        }
    
        // 解引用操作符
        T& operator*() const noexcept {
            return *ptr_;
        }
    
        // 隐式转换为bool类型,判断指针是否为空
        explicit operator bool() const noexcept {
            return ptr_ != nullptr;
        }
    
    private:
        T* ptr_;
    };
    

    举例

    std::unique_ptr<framePool> framePool_; 
    if(!framePool_){
      framePool_.reset(new framePool());
    }
    

    智能指针判空处理

    !framePool_仍然使用了std::unique_ptr的隐式转换为bool类型的成员函数。
    如果framePool_持有一个有效的指针(非空),则转换结果为false,否则为true。

    reset

    为unique_ptr的显式成员函数。

    相关文章

      网友评论

          本文标题:智能指针简单实现

          本文链接:https://www.haomeiwen.com/subject/hqwzwdtx.html