IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++新特性22_weak_ptr的提出及解决循环引用的思路 -> 正文阅读

[C++知识库]C++新特性22_weak_ptr的提出及解决循环引用的思路

本篇作为weak_ptr提出的文章,首先看以下代码的运行结果。

#include <memory>
#include <tchar.h>

int _tmain(int argc, _TCHAR* argv[])
{
	//定义智能指针sptr指向new int(3)
	std::shared_ptr<int> sptr(new int(3));
	
	//sptr赋给sptr2,两个指针指向int(3) 引用计数变为2
	std::shared_ptr<int> sptr2 = sptr;
	
	//将wptr弱指针与强指针联系起来
	std::weak_ptr<int> wptr = sptr;
	
	//弱指针要使用强指针 
	//(!wptr.expired())判断弱指针是否与强指针关联  并且强指针是存在的
	//wptr.lock()将弱指针提升为强指针
	if (!wptr.expired()) {

		std::shared_ptr<int> sptr3 = wptr.lock();
	}

	return 0;
}

强指针的引用计数:
在这里插入图片描述
在这里插入图片描述
有一个弱指针存在关联着这个强指针
在这里插入图片描述
对弱指针进行提升
在这里插入图片描述
本篇考虑一个问题:问题1:为什么会存在强弱指针的计数
(1)强指针的循环引用
首先看一个之前写的一个的抽象的循环引用

A{

B对象智能指针(引用计数 2}

B{

A对象智能指针(引用计数2)

}

构造: A对象在创建时引用计数为1,由于其内部有B的对象,B对象内部又有A对象,因此A对象的引用计数为2,同理B的引用计数为2

释放: A释放时,引用计数减2-1,但是B中又有A对象,引用计数还为1,A不能完全释放,同理B也是

为了打破这个引用循环,要使得A B中一个的引用计数减1次
(2)弱指针的使用

  • 引用计数减1也会导致统计次数不准,为了解决统计次数不准的问题,引入了弱指针
  • 弱指针与强指针是关联的,但是它不能直接使用,需要使用.lock函数进行提升,增加强指针的引用次数
  • 提升将强指针的次数+1,但是不会影响弱指针表达出的原强指针的引用次数仍为1
A{

B对象弱智能指针(引用计数 1) weak_ptr_uses_count

}

B{

A对象智能指针(引用计数 2) shared_ptr_uses_count

}

学习视频地址: weak_ptr的提出及解决循环引用的思路

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:32:36  更:2021-12-11 15:33:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:31:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码