shared_ptr

常用接口

use_count() : 获得引用计数数量。

get() : 获得原始指针。

reset() : 指向NULL内存。

注意事项

1. 不能直接赋值NULL,编译无法通过;如果需要清空使用reset();reset后,ptr指向NULL内存。

2. 不能手动释放内存,如delete ptr.get(),这将会出现内存错误,至于为什么,目前还不清楚。

3. 先分配内存,再交给智能指针,再释放也不可以,如
    int * c = new int;
    boost::shared_ptr<int> pObj(c);
    delete c;

    会出现内存错误,boost是怎么防止用户在外面delete c的呢?

weak_ptr

是执行弱引用的智能指针。当你需要它的时候就可以使用一个强(共享)指针指向它(当对象被释放的时候,它为空),当然这个强指针在使用完毕应该立即释放掉

struct CBetterChild : public CSample { weak_ptr<CDad> myDad; void BringBeer()
{ shared_ptr<CDad> strongDad = myDad.lock(); // request a strong pointer if
(strongDad) // is the object still alive? strongDad->SetBeer(); // strongDad is
released when it goes out of scope. // the object retains the weak pointer } };
注意事项

1. 弱引用如果需要操作类对象,需要转为强引用,通过lock接口获得

2. 获得强引用后,需要检测对象是否为空,因为有可能对象已经释放

3. 操作完毕后,强引用应该马上释放,也就是强引用最好是临时局部变量

常用接口

lock() : 转为强引用,如果对象已经释放,则返回空的强引用

expired(): 判断对象是否已经释放

技术
©2019-2020 Toolsou All rights reserved,
一个名叫“讨火车”的小村子 终于把火车讨来了运营商 网站访客手机号码抓取hive压缩&&hdfs合并小文件精准手机号抓取,运营商大数据函数基本定义和使用‘未完待续Spring Boot教程十六:SpringBoot注入类实现多线程基于神经网络的车辆牌照字符识别技术MyBatis 新增数据 成功 返回 自增主键ID值json反斜杠问题接错水管喝了三年软水?软水和软水机究竟有何用