C++智能指针

智能指针简介

由于使用malloc、new在堆上申请空间后,容易忘记释放对应空间,C++提出了智能指针管理申请的内存,避免内存泄露。
RAII(Resource Acquisition Is Initialization),是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。
借此,我们实际上把管理一份资源的责任托管给了一个对象。这样就不需要显式地释放资源;对象所需的资源在其生命期内始终保持有效。
智能指针就是基于RAII的思想避免内存泄露,本质就是将指针封装为类模板,并通过重载运算符使其具有普通指针的功能。

auto_ptr

C++98引入了auto_ptr,采用管理权转移的思想,也就是原对象拷贝给新对象的时候,原对象就会被设置为nullptr,此时就只有新对象指向一块资源空间。
因为原来的对象被设置为nullptr,再次使用原对象会导致程序崩溃,使用并不方便。
若将auto_ptr采用值传递作为函数的参数,当函数执行结束时会导致资源被释放,若之后的代码再次访问此auto_ptr则会是nullptr,即无意的拷贝操作使得原对象为nullptr。

    auto_ptr<int> ptr1(new int(1));
    auto_ptr<int> ptr2(ptr1);  //ptr1被置为nullptr

unique_ptr

既然auto_ptr使用不便,C++11又提出了新的智能指针。
首先是unique_ptr,它采用独占式的思想(和auto_ptr思想有点类似),某个时刻只能有一个unique_ptr指向一个动态分配的资源对象,
也就是这个资源不会被多个unique_ptr对象同时占有,它所管理的资源只能在unique_ptr对象之间进行移动。
它禁用了拷贝构造和赋值,提供move函数用于在unique_ptr对象之间进行移动。
一旦资

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值