Smart pointer 简介

  智能指针...

Smart Pointer

  智能指针是行为类似于指针的类对象,但这种对象还有其他功能。

  • 下面我将将会分别介绍几种不同的智能指针

auto_ptr

  • 包含在 <memory> 头文件中
  • C++98时被引入
  • 已经在C++11是被弃用
  • C++17被移除

特点

  • auto_ptr 没有使用引用计数,在复制构造函数和赋值构造函数中将对象所有权转移
  • auto_ptr 不能指向数组,因为auto_ptr在析构的时候只是调用delete,而数组应该要调用delete[]
  • auto_ptr 不能和标准容器(vector,list,map…)一起使用
    • 由于auto_ptr在复制和赋值构造中将转移所有权

unique_ptr

  • 包含在 <memory> 头文件中
  • C++11时被引入
  • 用于解决auto_ptr的拷贝问题

特点

  • 不支持拷贝操作,只能进行所有权的转移
  • std::unique_ptr 通常用于管理对象的生命周期,包括: 通过保证正常退出和异常退出时的删除,为处理具有动态生命周期的对象的类和函数提供异常安全性
  • 对于自定义的类对象,支持提供自定义的删除器
  • 常用于单线程
  • 可以为空

shared_ptr

  • 包含在 <memory>头文件中
  • C++11时被引入
  • 支持拷贝和复制

特点

  • 支持拷贝和复制
  • 对于自定义的类对象,支持提供自定义的删除器
  • 常用于多线程
  • 多个对象可以共享所有权
  • 可以为空

weak_ptr

  • 包含在 <memory> 头文件中
  • C++11时被引入
  • 它是对 std::shared_ptr 管理的对象的非拥有引用,必须将其转换为 std::shared_ptr 才能访问引用的对象

特点

  • 解决shared_ptr引起的循环引用问题
  • 获取某个shared_ptr指向对象的临时所有权,在shared_ptr对象被销毁是可以延长此对象的生命周期