C++中智能指针-atuo_ptr、unique_ptr

先引入一个知识点即:
RAII(Resource Acquisition Is Initialization)

  • 资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。
  • 智能指针的出现就是为了更好地完成清理工作,最大程度的避免内存泄露等问题,正是资源分配实现的一种方法。智能指针就是自动管理指针所指向的资源的释放。
  • 我们虽然可以人为地释放的自己所开辟的内容,但是在有些情况下,导致自己所开辟的内存不能得到释放,从而导致内存泄漏。下面我简单模拟一种常见的情况:
    case
    既然需要智能指针那么我们就应该了解一下智能指针的种类

C++11标准库中有以下几种指针:
auto_ptr:是C++中最早的智能指针,但存在很大问题。它所实现的功能为指针管理权的转移。(不要使用)
虽然不使用,但是我们也需要去了解!下面是我的代码简单逻辑实现:

template<class T>
class Auto_ptr
{
public:
    Auto_ptr(T& ptr)
        :_ptr(ptr)
    {}
    ~Auto_ptr()
    {
    if(_ptr)
        delete _ptr;
    }
    Auto_ptr(Auto_ptr<T>& ap)
        :_ptr(ap._ptr)
    {
        ap._ptr = NULL;
    }
    Auto_ptr& operator=(Auto_ptr<T>& ap)
    {
        if (this != &ap)
        {
            delete _ptr;
            _ptr = ap._ptr;
            ap._ptr = NULL;
        }
    }
private:
    T* _ptr;
};

这里写图片描述
unique_ptr:也称为防拷贝智能指针,它通过将赋值运算符的重载函数、拷贝构造函数声明设置为私有函数,既防止类外的人为定义,同时阻止了拷贝。(可以基本满足需求)
下面是我代码的简单逻辑的实现:

template<class T>
class Unique_ptr
{
public:
    Unique_ptr(T& ptr)
        :_ptr(ptr)
    {}
    ~Unique_ptr()
    {
        delete _ptr;
    }   
private:
    T* _ptr;
    Unique_ptr(Unique_ptr<T>& ap);
    Unique_ptr& operator=(Unique_ptr<T>& ap);
};

shared_ptr:使用引用计数实现的智能指针,功能强大,使用以及适用场景多,但是存在复杂,与循环使用的问题。(在下篇博客重点介绍循环使用的问题)
weakd_ptr:为了解决shared_ptr指针的循环使用缺陷。
关于shared_ptr指针与weakd_ptr:将在下一篇博客重点讲述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值