C++(STL):04---智能指针之weak_ptr
一、概念
weak_ptr是一种不控制所指向对象生存期的智能指针,它指向一个shared_ptr管理的对象
拥有“弱”共享的特点
最重要的特点
一个对象被多个shared_ptr类所指向时,就会拥有多个引用计数
但是当weak_ptr指向一个shared_ptr类所指向的对象时,该对象的引用计数不会增加
因此,当最后一个对象的最后一个shared_ptr类被释放时,该对象会被释放。即使此时仍有weak_ptr指向该对象,该对象的内存仍然会被释放
二、weak_ptr类的基本使用
我们需要用一个shared_ptr类来初始化weak_ptr类
也与wp无关
auto p=make_shared<int>(42); //初始化一个shared_ptr对象weak_ptr<int> wp(p); //用p初始化wp,wp弱共享p//wp只是指向p所指的对象,p的引用计数没有改变,并且p所指对象的释放
四、lock函数的使用
用来检测weak_ptr所指的对象是否仍然存在,如果存在就继续访问,不存在则做相应的处理
返回值:
如果weak_ptr所指的shared_pre引用计数为0,返回一个空的shared_ptr
否则,返回一个shared_ptr对象
auto p=make_shared<int>(42);weak_ptr<int> wp(p);if(shared_ptr<int> np=wp.lock()){...//如果np不为空则执行if}else{ }
C++(STL):04---智能指针之weak_ptr相关推荐
- 深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)
1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智 ...
- C++智能指针:weak_ptr实现详解
文章目录 weak_ptr描述 声明 作用 原理实现 函数成员使用 总结 weak_ptr描述 声明 头文件:<memory> 模版类:template <class T> c ...
- 【C++11新特性】 C++11智能指针之weak_ptr
http://blog.csdn.net/xiejingfa/article/details/50772571 原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/ar ...
- c++11新特性_【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是 C++11 引入的三种智能指针中的:weak_ptr. 在学习 weak_ptr 之前最好对 shared_ptr 有所了解.如果你还不知道 shared_ptr 是何物,可以 ...
- C++ STL 四种智能指针
文章目录 0.前言 1.unique_ptr 2.auto_ptr 3.shared_ptr 3.1 shared_ptr 简介 3.2 通过辅助类模拟实现 shared_ptr 4.weak_ptr ...
- C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解
目录 1.引言 2.什么是智能指针? 3.在Visual Studio中查看智能指针的源码实现 4.独占式指针unique_ptr 4.1.查看unique_ptr的源码实现片段 4.2.为什么uni ...
- Boost智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string> #include <ios ...
- 【Boost】boost库中智能指针——weak_ptr
循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string> #include <ios ...
- [C++11]弱引用智能指针weak_ptr初始化和相关的操作函数
弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针.std::weak_ptr 没有重载操作符 * 和 ->,因为它 ...
最新文章
- Jenkins 服务重启方法
- 一文通俗了解对抗生成网络(GAN)核心思想
- 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
- 记录一次服务器大中间表优化的问题(数据倾斜的解决)
- BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)
- php限制密码输入错误次数,js密码输入错误指定次数禁止输入
- 分享:ViewState压缩方法
- Python学习总结(2)——变量
- Windows XP 启动NetMeeting
- 微信发朋友圈如何只发文字?
- [SUCTF 2019]EasySQL1
- Shiro 实战教程(全)
- 5.庆功会-多重背包
- 第16集丨阳明心学量子力学
- 华为员工自杀-又是加班惹得祸
- 计算机金融学校排名2015,2015全国金融专业高校排名
- 结构体是纸老虎,旧知识新用法,easy
- 判断两条直线是否相交c语言,计算几何-两条线段是否相交(三种算法)
- 比勤奋更重要的,是学会正确思考
- Win10删除C盘临时文件
热门文章
- linux中线程的挂起与恢复(进程暂停)
- ubuntu ip设置
- java array_Java 数组
- vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析
- postgresql+postgis安装
- 【转】CT中的“层“与“排“的区别
- 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
- 【转】2.2[译]async/await中阻塞死锁
- Sharepoin学习笔记—架构系列--01 Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)
- NuGet是什么?理解与使用(下)