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

Rust进阶-part4-智能指针2

Rust进阶[part4]_智能指针2

Rc<T>

Rc<T>(Reference Counted)是 Rust 标准库提供的单线程共享所有权智能指针,通过引用计数实现多所有权管理。以下是其核心特性与使用场景

核心特性

  1. 引用计数

    • 每个实例在堆上存储:

    • 实际数据 T

    • 引用计数器(记录活跃引用数量)

    • 克隆时只增加计数器,不会深拷贝数据:

      let a = Rc::new(vec![1,2,3]);
      let b = a.clone(); // 计数器从1→2
      
    • 最后一个引用离开作用域时释放内存

  2. 不可变共享

    • 所有者只能通过 .clone() 共享不可变引用

    • 需配合RefCell<T>实现内部可变性:

      let cell = Rc::new(RefCell::new(5));
      *cell.borrow_mut() += 1;
      

使用场景

下面这个例子使用box可以实现链表的结构

enum list {Cons(i32, Box<list>),Nil,
}
fn main() {let list = list::Cons(1, Box::new(list::Cons(2, Box::new(list::Nil))));println!("{:?}", list);
}
------
Cons(1, Cons(2, Nil))
  • Cons变体:表示链表节点

    第一个参数i32:存储当前节点的数值

    第二个参数Box:指向下一个节点的堆内存指针

  • Nil变体:表示链表终止节点(空节点)

如果需要共享引用,可以转换为Rc, 需要使用use std::rc::Rc;

use std::rc::Rc;#[derive(Debug)]
enum list {Cons(i32, Rc<list>),Nil,
}fn main() {let a = Rc::new(list::Cons(5, Rc::new(list::Nil)));let b = list::Cons(10
http://www.xdnf.cn/news/1248697.html

相关文章:

  • 力扣106:从中序与后序遍历序列构造二叉树
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-登录实现
  • Redis里面什么是sdshdr,可以详细介绍一下吗?
  • Linux lvm逻辑卷管理
  • 跑yolov5的train.py时,ImportError: Failed to initialize: Bad git executable.
  • 【Linux】特效爆满的Vim的配置方法 and make/Makefile原理
  • 一种红外遥控RGB灯带控制器-最低价MCU
  • MySQL间隙锁在查询时锁定的范围
  • 前端遇到页面卡顿问题,如何排查和解决?
  • 【运维部署篇】OpenShift:企业级容器应用平台全面解析
  • Spring 的优势
  • Springboot集成Log4j2+MDC串联单次请求的日志
  • HBM Basic(VCU128)
  • 《Python基础》第3期:使用PyCharm编写Hello World
  • Leetcode-2080区间内查询数字的频率
  • 查看部署在K8S服务的资源使用情况
  • LOOP Finance:一场 Web3 共和国中的金融制度实验
  • 创维智能融合终端DT741_移动版_S905L3芯片_安卓9_线刷固件包
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 前端保持和服务器时间同步的方法【使用vue3举例】
  • Tasks and Deadlines(Sorting and Searching)
  • Mysql-事务
  • Nginx入门:高性能Web服务器详解
  • 【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南
  • Claude Code实战体验:AI智能编程助手如何重塑开发工作流?
  • 2. JS 有哪些数据类型
  • Linux的NFS与Autofs配置指南
  • nodejs 编程基础01-NPM包管理
  • 最优化中常见的优化理论
  • Shader开发(七)创建第一个Shader项目