智能指针概述

#include

智能指针会自动释放所指向的对象。

三种类型:

  • shared_ptr 允许多个指针指向同一个对象
  • uniqur_ptr 独占所指向的对象
  • weak_ptr 弱引用,指向共享指针指向的对象,但不增加计数

shared_ptr详解

初始化

通常用auto来代替share_ptr

  • auto p = make_share<vector>(); 得到共享指针p,指向的对象只有一个引用者
  • auto q§; 此时有两个引用者

引用计数

拷贝shared_ptr会递增计数器,包括:

  • 拷贝初始化
  • 值传递函数参数
  • return shared_ptr

一旦引用者计数为零,share_ptr会的析构函数自动销毁所管理的对象。

可以用于自动释放相关联的内存。

与new结合使用

可以用new返回的指针来初始化智能指针,但必须显式绑定(直接初始化),不能将new出的普通指针隐式转换为智能指针(赋值)。

示例:

1
shared_ptr<int> p2(new int (42));

  • ps1: 不要混合使用普通指针和智能指针,将shared_ptr绑定到一个普通指针时,内存管理的任务就交给了智能指针,此后不应该再用普通指针访问所指的内存,无法知道何时内存会被智能指针销毁。
  • ps2: 不要使用get初始化另一个智能指针或者为另一个智能指针赋值。