当前位置: 首页 > article >正文

引用计数 Rc 数据类型

RUST提供了一个名为Rc<T>的类型来支持多重所有权,RcReference counting的缩写。Rc<T>类型实例会在内部维护一个用于记录值引用次数的计数器,从而确定这个值是否仍在使用。如果一个值的引用次数为零,就意味着这个值可以被安全清理掉,而不会触发引用失效的问题。

你可以把Rc<T>想象成客厅的电视,在第一个人打开电视之后,后续进入客厅的其他人都可以直接观看电视。电视会一直保持开启状态直到最后一个人离开时关闭,因为此时不需要再使用电视了。

当你希望将堆上的一些数据分享给程序的多个部分同时使用,而又无法在编译器确定哪个部分会最后释放这些数据时,我们就可以使用Rc<T>类型。

需要注意的是,Rc<T>只能被用于单线程场景中。

使用Rc<T>共享数据

基于Box<T>无法实现下面的场景,Cons变体有持有它存储的数据,因此,整个a列表所有权会在创建b列表时被移动到b中。换句话说,b持有了a列表的所有权。当我们随后再次使用a来创建c列表时就会出现编译错误。

在这里插入图片描述

use crate::List::{Cons, Nil};
enum List {
    Cons(i32, Box<List>),
    Nil,
}

fn main() {
    let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
    let b = Cons(3, Box::new(a));
    let c = Cons(4, Box::new(a));
}

http://www.kler.cn/a/155111.html

相关文章:

  • 基于微信小程序的公务员考试学习平台的设计与实现,LW+源码+讲解
  • Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
  • Python的Matplotlib
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • 【mysql的当前读和快照读】
  • 第一个 Flutter 项目(1)共46节
  • 【Python百宝箱】分布式魔法:穿越分布式奇境的导航
  • 深度学习——第1章 深度学习的概念及神经网络的工作原理
  • LeetCode 1423. 可获得的最大点数:滑动窗口
  • 智加科技获全国首张重卡无人驾驶开放道路测试牌照
  • RabbitMQ架构是什么样的
  • 【SpringBoot】讲清楚日志文件lombok
  • Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP
  • mongodb查询数据库集合的基础命令
  • 学习Java第57天,Servlet的基本使用步骤
  • PTA结构体经典编程题
  • Android studio Load error:undefined path variables
  • ARM架构安全简介
  • 数据链路层之VLAN基本概念和基本原理
  • springboot 整合 RocketMQ 可用于物联网,电商高并发场景下削峰,保证系统的高可用
  • HarmonyOS应用开发——程序框架UIAbility、启动模式与路由跳转
  • 鸿蒙绘制折线图基金走势图
  • 一缕青丝寄相思
  • 万宾科技第四代可燃气体监测仪的作用
  • C-语言每日刷题
  • 测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests