首页 > 其他分享 >Rc+RefCell解释

Rc+RefCell解释

时间:2024-03-11 21:00:30浏览次数:26  
标签:解释 i1 println 引用 Rc RefCell 可变性

1 Rc(Reference Counted)

Rc(Reference Counted):是Rust标准库中,用于处理引用计数智能指针。用来突破单一所有权的限制。其基本操作是通过clone()增加引用计数。

Reference Counted
// Rc会把对应的数据结构创建在堆上
// 堆上的数据才适合被用来在多个函数调用栈帧中共享
let i1 = Rc::new(1);
// 复制引用计数
let i2 = i1.clone();
let i3 = i1.clone();
// 现在引用计数值为3
println!("{}", Rc::strong_count(&i1)); //3
println!("{}", Rc::strong_count(&i2)); //3
println!("{}", Rc::strong_count(&i3)); //3

2 内外可变性

2.1 外部可变性

简单来说,mut关键字注明的可修改性就是外部可变性

Rust中提供了两种引用/借用类型:

  • &:只读引用,只读引用不允许修改被引用的对象。
  • &mut:可变引用,可变引用才有修改权限。

在编译阶段,Rust会检查,同一作用域内,对于某一个对象的引用,只允许存在两种情况:

要么只有一个活跃的可变引用,要么同时存在多个只读引用

2.2 RefCell和内部可变性

RefCell,提供内部包装类型的内部可变性,用来突破mut变量才能被修改(外部可变性)的限制。

 

标签:解释,i1,println,引用,Rc,RefCell,可变性
From: https://www.cnblogs.com/imreW/p/18067028

相关文章

  • ElasticSearch架构介绍及原理解析
    前言在当今大数据时代,数据的快速增长使得有效地管理、检索和分析数据成为企业发展的关键。Elasticsearch(以下简称ES)作为一种开源的分布式搜索和分析引擎,在这个领域中扮演着重要的角色。它不仅仅只是全文搜索,还支持结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关......
  • RC4算法:流密码算法的经典之作
    一、RC4算法的起源与演变RC4算法是由著名密码学家RonRivest在1987年设计的一种流密码算法,其名字来源于RivestCipher4。RC4算法简单高效,被广泛应用于数据加密和网络安全领域。尽管RC4算法在早期被广泛使用,但随着时间的推移,一些安全性问题逐渐暴露,导致其在一些场景下被取代......
  • ESP32CAM使用Quirc识别二维码并连接WIFI
    ESP32CAM使用Quirc识别二维码并连接WIFI网上有教程,但是是要做出来很难,或者说做出来报错识别不了。前提:搭建好ESP-IDF环境CAMERA能成功初始化此处用的二维码识别库是用的quirc,如下这个和Github下载的差不多,加了个CMakeList,我会把这个传到我的Github上,感兴趣去下载Lesterbor/E......
  • Logstash接收udp/tcp数据 python+ udp/tcp +logstash +elasticsearch
    Logstash接收udp/tcp数据背景:在 Logstash数据源为日志文件操作 基础上进行一、配置文件1.D:\usr\local\etc\logstash\pipeline1目录下logstash.conf文件配置input{stdin{}udp{host=>"0.0.0.0"#从5000端口获取日志port=>5000......
  • arcgis用一个图层分割另一个图层
    现有用线图层A、面图层B,需使用A图层分割B图层,操作步骤如下:1、打开Editor编镇工具条,单击StartEditing开始编辑。2、鼠标选中线对象,或者全选线图层(右键单机线图层A依次执行“选择/选择全部”)。 3、打开Advancedediting工具条。 4、选择splitpolygons,点确定后,自动按......
  • 技术笔记(6)SourceTree Push到github时报错
    技术笔记(6)SourceTreePush到github时报错remote:SupportforpasswordauthenticationwasremovedonAugust13,2021.Pleaseuseapersonalaccesstokeninstead.​即无法通过输入账号密码的方式来验证,需要使用个人token来验证。昨晚搜到了很多无效方法,搞得有点头痛了,记......
  • Archi - ini配置
    ini配置文件: https://blog.csdn.net/first_bug/article/details/129693732ini配置文件ini文件是initializationfile的缩写,即初始化文件,是widows系统配置文件所采用的存储格式。文件扩展名:.iniini配置文件的后缀名也不一定必须是.ini,也可以是.cfg,.conf或者是.txtini文件格......
  • ChatGLM-6B模型基于 P-Tuning v2 微调脚本参数解释
    1、地址:https://github.com/THUDM/ChatGLM-6B/blob/main/ptuning/README.md2、参数示例PRE_SEQ_LEN=128LR=2e-2CUDA_VISIBLE_DEVICES=0python3main.py\--do_train\--train_fileAdvertiseGen/train.json\--validation_fileAdvertiseGen/dev.json\......
  • strcpy和memcpy的区别
    本质区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。strcpy函数源码(C......
  • Elasticsearch
    目录Elasticsearch简介存储结构索引-index文档类型-type文档-document文档字段-field映射-mapping类比MySQL存储结构文档CURD文档元数据插入文档查询文档更新文档删除文档文档类型定义精确值&全文类型自动映射自定义文档的数据类型查询索引的映射规则查询SearchAPIQueryDSL基......