智能指针简单实现

2023-11-27  本文已影响0人  Youzhicha

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的显式成员函数。

上一篇 下一篇

猜你喜欢

热点阅读