您当前的位置: 首页 > 

我什么都布吉岛

暂无认证

  • 2浏览

    0关注

    292博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

智能指针(一)初识

我什么都布吉岛 发布时间:2020-05-28 00:13:27 ,浏览量:2

一、为什么要使用智能指针? 1.1 动态内存和使用原因

程序使用内存大概可以分为“堆栈全常代”[1],和智能指针相关的是堆区,堆(heap)在C++中也被称为自由空间。自由空间的“自由”应该理解为程序员自己编写的自主控制其生命周期的空间,申请的空间大小相对宽裕[2]。

出于三个原因要使用动态内存

  • 程序不知道自己要使用多少对象。容器
  • 程序不知道所需对象的准确类型。多态
  • 程序需要在多个对象间共享数据。应用

除此,智能指针是异常安全的。即异常退出也会成功释放对应内存。

1.2 管理动态内存的方法

虽然C++程序员可以使用new和delete完成对动态内存的申请和释放,但是该方式不正确使用会出现“内存泄漏”、“多次释放同一空间”等问题,前者忘记释放,后者无意多次释放。为了减少这种管理动态内存上出错概率,智能指针就出现了!C++有四个智能指针分别是: auto_ptr, unique_ptr,shared_ptr, weak_ptr, 其中后三个是C++11支持,auto_ptr于C++17被移除[3]。

二、智能指针声明和使用

#include中可以找到这些智能指针的定义,主要

template
explicit shared_ptr( Y* ptr );

template
shared_ptr( Y* ptr, Deleter d );//删除器版本

template class unique_ptr;               

template  class unique_ptr;

template class weak_ptr;

template class auto_ptr;
template class auto_ptr;

shared_ptr和unique_ptr 都能够帮助程序员管理好内存释放时机,但是前者指的是可以由多个shared_ptr管理,后者只能通过一个unique_ptr管理。

unique_ptr因为不用管理引用计数,效率可以和原始指针相媲美[5]。

std::shared_ptr sp = std::make_shared(2, 3);
std::shared_ptr ssp(sp);
std::shared_ptr sssp(ssp);
std::cout            
关注
打赏
1658157489
查看更多评论
0.0419s