智能指针
来源:互联网 发布:一看就是淘宝爆款 编辑:程序博客网 时间:2024/05/16 02:24
1.shared_ptr
1.1 智能指针也是模板类,包含在头文件< memory >中
1.2 相关操作
不传递参数则进行值初始化,int为0 shared_ptr< T > p(q) p是shared_ptr q的拷贝 p = q p的引用计数-1,q的引用计数+1 p.unique() 判断p.use_count()==1?true,false p.use_count() 返回共享对象的智能指针数量,可能比较慢,主要用于调试
1.3 不能进行内置指针到智能指针的转换,因为接受指针参数的智能指针构造函数是explicit的
shared_ptr< int > p1 = new int(1024); ×
shared_ptr< int > p2( new int(1024) ); √
1.4 定义和改变shared_ptr的其它方法
1.5 尽量不要混用内置指针与智能指针
T *p = new T();
shared_ptr q(p);
当q销毁时,内存被释放,此时再使用p将产生未定义的行为。
1.6 不要使用get初始化另一个智能指针或为其赋值,会导致两个不相关的智能指针指向相同的内存对象,一方释放,会导致另一方出错,delete两次
1.7 发生异常时,智能指针会将内存释放(局部变量销毁)
2. unique_ptr
它持有对对象的独有权——两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。
2.1 构造与拷贝
初始化unique_ptr必须采用直接初始化形式,且不支持拷贝或赋值,作为函数返回值除外,因为编译器知道它将被销毁。
2.2 u.release()放弃控制权,返回指针,并将u置空
2.3删除器指定与shared_ptr不一样
unique< T , decltype(fcn)* > p(new T, fcn);
3. weak_ptr
weak_ptr 是不控制所指对象生命周期的智能指针,指向shared_ptr管理的对象,并不改变shared_ptr的引用计算
3.1对象访问
由于对象可能不存在,我们不能使用weak_ptr直接访问对象,而必须调用lock,若w.expired()为true,返回一个空shared_ptr,否则返回shared_ptr。
3.2使用原因
当shared_ptr指向形成环时,引用计数一直处于≥1,无法释放各自所指的内存对象。
此时weak_ptr将发挥其优势,图左部分全为shared_ptr(强引用)此时,指针引用计数永远不会等于0,也就无法释放相应的内存空间,而右图采用weak_ptr(弱引用)不会影响引用计数,所以会释放相应的内存。
0 0
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- 智能指针
- iOS获取UUID,并使用keychain存储
- JS随机颜色
- 坐标详解与PROJ.4使用说明
- hdu 2140 java
- 读书笔记 -《Python 黑帽子》 ( 一 )
- 智能指针
- JAVA 3DES 加密/解密 32位密钥
- 关于android postDelayed
- 最全的android开发资料大集合
- 利用GridView实现功能界面
- GCD IOS程序等一会在执行,延时执行
- Windows Server 2008 访问NFS共享存储
- spring 多数据源的配置
- python中文乱码的解决方法