智能指针,自动释放所指向的对象。
头文件
#include <memory>
shared_ptr 允许多个指针指向同一个对象
unique_ptr 独占所指向的对象
weak_ptr 指向shared_ptr所管理的对象
作用原理:在函数作用域结束时调用析构函数自动释放资源。
shared_ptr: 共享指针,会通过计数器记录有多少个指针指向同一资源,可通过use_count()查看有多少个指针指向同一资源。
创建智能指针必须指定数据类型:shared_ptr p1;
动态创建对象:
注意:
stared_ptr<int> p = new int(10); //错误写法
这是错的,接受指针参数的智能指针构造函数是 explicit 的,因此,我们不能将一个内置指针隐式的转换为一个智能指针,必须使用直接初始化形式。
shared_ptr<int> p2(new int(1024)); //正确写法
一些案例:
递增递减问题:
cout << r.use_count() << endl; //3
p.get() //获取指针地址,如shared_ptr<int> p(new int(10)); p.get()获取的是指向new int(10)地址,也即获取这个指针,auto q = p.get(); 相当于auto q = new int(10);
p.reset() //p指针不在指向这个内存,资源数减1
unique_ptr指针:
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。