iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++11的shared_ptr与weak_ptr示例分析
  • 717
分享到

C++11的shared_ptr与weak_ptr示例分析

2023-06-19 10:06:13 717人浏览 安东尼
摘要

这篇文章主要讲解了“c++11的shared_ptr与weak_ptr示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的shared_ptr与weak_ptr示例分析”吧!实

这篇文章主要讲解了“c++11的shared_ptr与weak_ptr示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的shared_ptr与weak_ptr示例分析”吧!

实例背景

先看下面的类图:

C++11的shared_ptr与weak_ptr示例分析

这是一台台式电脑的静态建模。DesktopPC有四个部分组成:主机,键盘,鼠标和显示器。这一部分是聚合关系的体现。

由于各个设备信息输出的需求,

  1. 键盘和鼠标需要向主板报告用户输入信息,所以也管理着主板信息;

  2. 主板需要向显示器输出显示内容,所以管理这显示器信息;

示例代码

Monitor类

C++11的shared_ptr与weak_ptr示例分析

Monitor只有一个输出函数,除此之外不需要其他任何信息。

MainBoard类

C++11的shared_ptr与weak_ptr示例分析

MainBoard类需要向Monitor类输出显示信息,所以需要Monitor类的参照信息。但是因为只是参照,所以这里使用了weak_ptr。有一点需要强调:Monitor对象在其他地方被删除时并不需要更新monitor的内容,因为lock方法会检测到这个事实。

Keyboard类

C++11的shared_ptr与weak_ptr示例分析

Keyboard类需要像Mainboard类输出键盘信息,所以需要Mainboard类的参照信息;weak_ptr的使用方法和Mainboard中一致。

Mouse类

C++11的shared_ptr与weak_ptr示例分析

Mouse类和Keyboard类的想法完全相同。

DesktopPC类

C++11的shared_ptr与weak_ptr示例分析

DesktopPC和各个设备之间虽然存在全体和部分的关系,但是因为每个设备可一个脱离DesktopPC独立存在,所以这种关系是松散的聚合关系,依然使用weak_ptr来管理。

主程序

准备工作完成之后,就是收获的时刻了。首先是构建各个对象,建立连接关系。

C++11的shared_ptr与weak_ptr示例分析

接下来确认各个shared_ptr的引用情况。

C++11的shared_ptr与weak_ptr示例分析

接下来确认系统动作。

C++11的shared_ptr与weak_ptr示例分析

在两次执行之间,代码删除了Monitor对象。请注意这里并没有一般的链接解除处理中常见的指针操作。

另外代码中也不需要显式的清理内存操作。

执行结果:

C++11的shared_ptr与weak_ptr示例分析

通过执行结果可以看出:

在系统执行动作之前,所有的引用计数都为1,并没有被weak_ptr影响;

当Monitor对象被简单粗暴地删除之后,weak_ptr的确认机制正确地,以一种非常简明的方式处理了这个变化。

敲黑板

使用shared_ptr以后,代码不再需要显式释放申请的内存,使内存的管理更加简单。

使用weak_ptr之后,可以通过lock方法来确认对象是否有效,使得内存的相互参照的管理更加容易。

感谢各位的阅读,以上就是“C++11的shared_ptr与weak_ptr示例分析”的内容了,经过本文的学习后,相信大家对C++11的shared_ptr与weak_ptr示例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: C++11的shared_ptr与weak_ptr示例分析

本文链接: https://www.lsjlt.com/news/295602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++11的shared_ptr与weak_ptr示例分析
    这篇文章主要讲解了“C++11的shared_ptr与weak_ptr示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11的shared_ptr与weak_ptr示例分析”吧!实...
    99+
    2023-06-19
  • C++智能指针shared_ptr与weak_ptr的实现分析
    目录shared_ptrweak_ptr内存模型RefCnt 和 Mdel实现shared_ptr 实现weak_ptr 实现shared_from_this()循环引用shared...
    99+
    2024-04-02
  • C++11中的智能指针shared_ptr、weak_ptr源码解析
    目录1、前言2、源码准备3、智能指针概念4、源码解析4.1、shared_ptr解析4.1.1、shared_ptr4.1.2、__shared_ptr4.1.3、__shared_...
    99+
    2024-04-02
  • C++11 shared_ptr 与 make_shared源码剖析详解
    目录0. 前言1. 源码分析1.1 头文件1.2 构造1.2.1 shared_ptr 的移动构造函数1.2.2 shared_ptr 的拷贝构造函数1.3 赋值重载1.4...
    99+
    2024-04-02
  • C++类与对象的示例分析
    这篇文章主要介绍了C++类与对象的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。类的引入在引入类之前,先来回忆一下C语言中的结构体。结构体是一种自定义类型,可以在其中...
    99+
    2023-06-29
  • Python与C++引用的示例分析
    本篇文章给大家分享的是有关Python与C++引用的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在用Python写建二叉树的代码的时候遇到了这个问题,原因就是把Pyt...
    99+
    2023-06-02
  • C++11包扩展举例分析
    这篇文章主要讲解了“C++11包扩展举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++11包扩展举例分析”吧!简单扩展假设我们有下面的模板函数。这是一个简单的加法函数,将参数a,b...
    99+
    2023-06-19
  • C++中类与对象的示例分析
    这篇文章将为大家详细讲解有关C++中类与对象的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言:C 语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数逐步调用解决问题。C++是基于面向对...
    99+
    2023-06-22
  • C++11中线程锁和条件变量的示例分析
    这篇文章主要介绍了C++11中线程锁和条件变量的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。线程std::thread类, 位于<thread>头文件,...
    99+
    2023-06-15
  • C++11的捕获列表举例分析
    本篇内容主要讲解“C++11的捕获列表举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++11的捕获列表举例分析”吧!值捕获先看如下代码:int factor = 2;auto mult...
    99+
    2023-06-19
  • C# Convert.ToInt32的示例分析
    这篇文章将为大家详细讲解有关C# Convert.ToInt32的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。比如说有一个string型的3,要给它转换成int型的是用(int)3...
    99+
    2023-06-18
  • C#中协变与逆变的示例分析
    这篇文章主要介绍了C#中协变与逆变的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一:什么是协变与逆变协变指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类...
    99+
    2023-06-25
  • C++11实现字符串分割的示例
    C++11 字符串分割代码示例如下,很显然, 使用了C++11 特性,代码简洁好多 #include <iostream> #include <string>...
    99+
    2024-04-02
  • C++11容器的emplace成员举例分析
    这篇文章主要介绍“C++11容器的emplace成员举例分析”,在日常操作中,相信很多人在C++11容器的emplace成员举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++11容器的emplace...
    99+
    2023-06-19
  • C++11中union的成员举例分析
    本篇内容介绍了“C++11中union的成员举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!类类型的union成员...
    99+
    2023-06-19
  • C++11有作用域的enum举例分析
    本篇内容介绍了“C++11有作用域的enum举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!枚举类型的困惑从C语言过度到C++以后,枚...
    99+
    2023-06-19
  • C++前缀和与差分算法的示例分析
    这篇文章将为大家详细讲解有关C++前缀和与差分算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、前缀和前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的...
    99+
    2023-06-25
  • C/C++中指针与内存管理的示例分析
    这篇文章主要介绍了C/C++中指针与内存管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。指针和内存管理始终是C/C++比较容易模糊的知识点,但在C/C++编程中又...
    99+
    2023-06-29
  • C++程序的示例分析
    小编给大家分享一下C++程序的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们先来看一段C++的示例代码:// my first&n...
    99+
    2023-06-25
  • Swift与Fedora的示例分析
    这篇文章给大家分享的是有关Swift与Fedora的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Swift 是一种使用现代方法构建安全性、性能和软件设计模式的通用编程语言。它旨在成为各种编程项目的最佳语...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作