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 ;
}

最新文章

  1. Mysql大范围分页优化案例
  2. Azure Redis Cache (3) 创建和使用P级别的Redis Cache
  3. Unity3D
  4. SVN 升级后出现You need to upgrade the working copy first.
  5. 『TCP/IP详解——卷一:协议』读书笔记——01
  6. iOS 进阶 第十八天(0423)
  7. ASP.NET Web Api返回对象类型为JSON还是XML
  8. Django中的Model(操作表)
  9. 关于cocos2d-x精灵加亮及变灰效果
  10. Chapter 2. Overview gradle概览
  11. An FPS counter.
  12. a标签加绝对定位在图片上面,a的链接和块状属性block失效,而且是所有IE版本都失效的
  13. Nexus远程Maven仓库索引下载教程
  14. java中memcached
  15. http缓存浅谈
  16. Linux下创建软链接
  17. 你们都在用IntelliJ IDEA吗?或许你们需要看一下这篇博文
  18. 正则表达式中的re.S
  19. PDO查询结果中文乱码
  20. vim 中文乱码怎么解决

热门文章

  1. Git 从入门到熟练|不敢说精通
  2. 2019-2020-1 20199314 &lt;Linux内核原理与分析&gt;第二周作业
  3. 实践APP安全性检测(一):APK反编译
  4. JRebel 破解最简单的使用
  5. 括号匹配(c语言实现)
  6. 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
  7. 基于Docker搭建大数据集群(一)Docker环境部署
  8. android实现emoji输入
  9. Ajax async属性
  10. 使用JavaScript&#183;求数组的最大值和最小值