std::weak_ptr
2024-08-30 01:20:14
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象.
进行该对象的内存管理的是那个强引用的 shared_ptr.
weak_ptr只是提供了对管理对象的一个访问手段.
为了解决std::shared_ptr在相互引用的情况下出现的问题而存在的,
std::shared_ptr赋值给weak_ptr时,weak_ptr 支持拷贝或赋值,不会引起智能指针计数增加。
weak_ptr.lock() 获取所管理的对象的强引用(shared_ptr)
weak_ptr.use_count() 返回与 shared_ptr 共享的对象的引用计数.
weak_ptr.reset() 将 weak_ptr 置空
#include <cstdio>
#include <iostream>
#include <memory> using namespace std; struct Child;
typedef std::weak_ptr<Child> STChildWeakPtr; struct Father : public std::enable_shared_from_this<Father>
{
string say;
STChildWeakPtr ChildWeakPtr;
};
typedef std::weak_ptr<Father> STFatherWeakPtr; struct Child : public std::enable_shared_from_this<Child>
{
string say;
STFatherWeakPtr FathWeakPtr;
}; int main()
{
//创建zh指针
std::shared_ptr<Father> fa(new Father);
fa->say = "Iam father";
std::shared_ptr<Child> ch(new Child);
ch->say = "Iam Child"; //赋值给weak_ptr
fa->ChildWeakPtr = ch;
ch->FathWeakPtr = fa; //通过weak_ptr获取指针对象
std::shared_ptr<Father> ff = ch->FathWeakPtr.lock();
cout << ff->say <<endl; std::shared_ptr<Child> cc = fa->ChildWeakPtr.lock();
cout << cc->say << endl;
return ;
}
最新文章
- Mysql大范围分页优化案例
- Azure Redis Cache (3) 创建和使用P级别的Redis Cache
- Unity3D
- SVN 升级后出现You need to upgrade the working copy first.
- 『TCP/IP详解——卷一:协议』读书笔记——01
- iOS 进阶 第十八天(0423)
- ASP.NET Web Api返回对象类型为JSON还是XML
- Django中的Model(操作表)
- 关于cocos2d-x精灵加亮及变灰效果
- Chapter 2. Overview gradle概览
- An FPS counter.
- a标签加绝对定位在图片上面,a的链接和块状属性block失效,而且是所有IE版本都失效的
- Nexus远程Maven仓库索引下载教程
- java中memcached
- http缓存浅谈
- Linux下创建软链接
- 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文
- 正则表达式中的re.S
- PDO查询结果中文乱码
- vim 中文乱码怎么解决
热门文章
- Git 从入门到熟练|不敢说精通
- 2019-2020-1 20199314 <;Linux内核原理与分析>;第二周作业
- 实践APP安全性检测(一):APK反编译
- JRebel 破解最简单的使用
- 括号匹配(c语言实现)
- java.sql.SQLException: Data truncation: Incorrect string value: &#39;\xE5\x91\xA8\xE6\x9D\xBE&#39; for column &#39;cname&#39; at row 1 Query
- 基于Docker搭建大数据集群(一)Docker环境部署
- android实现emoji输入
- Ajax async属性
- 使用JavaScript&#183;求数组的最大值和最小值