shared_ptr智能指针
智能指针概述
#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初始化另一个智能指针或者为另一个智能指针赋值。
评论