智能指针 Unique_ptr实现

unique_ptr概述

unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。
unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。
unique_ptr对象始终是关联的原始指针的唯一所有者。我们无法复制unique_ptr对象,它只能move。
由于每个unique_ptr对象都是原始指针的唯一所有者,因此在其析构函数中它直接删除关联的指针,不需要任何参考计数。

unique_ptr数据结构

为了实现unique_ptr的功能,我们采用以下数据结构。

template <typename T>
class Unique_ptr {
private:
    T* ptr_; //指向原始指针
    //禁用拷贝构造函数和重载=,从而独占对象
    Unique_ptr(unique_ptr<T> const& up) = delete;
    Unique_ptr<T>& operator=(Unique_ptr<T> const& up) = delete;
    void del() {
        if (ptr_)  //防止释放所有权后delete
        {
            delete ptr_;
            ptr_ = nullptr;  //防止野指针
        }
	}
}

unique_ptr代码实现及解析

#include <iostream>
using namespace std;
template <typename T>
class Unique_ptr {
private:
    T* ptr_;
    //禁用拷贝构造函数和重载=,从而独占对象
    Unique_ptr(unique_ptr<T> const& up) = delete;
    Unique_ptr<T>& operator=(Unique_ptr<T> const& up) = delete;
    void del() {
        if (ptr_)  //防止释放所有权后delete
        {
            delete ptr_;
            ptr_ = nullptr;  //防止野指针
        }
    }

public:
    Unique_ptr(T* ptr = nullptr) :ptr_(ptr) {}
    ~Unique_ptr() {
        del();
    }
    T& operator*() const {
        return *ptr_;
    }
    void reset() {
        del();
    }
    T* get() const {
        return ptr_;
    }
    T* release() {
        T* p = ptr_;
        ptr_ = nullptr;
        return p;
    }
    T* operator->() {
        return ptr_;
    }
};


template <typename T>
T* move(Unique_ptr<T>& tmp) {
    if (tmp.get()) {
        return tmp.release();
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值