当前位置: 首页 > 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.dtcms.com/a/316301.html

相关文章:

  • 真正的多模态上下文学习需要关注视觉上下文
  • 人工智能领域、图欧科技、IMYAI智能助手2025年1月更新月报
  • 【RabbitMQ】高级特性—消息确认详解
  • 轻量应用服务器Centos系统上安装jdk8和Jdk17教程(详细)
  • BFS 和 DFS 编程思想、框架、技巧及经典例题总结
  • 【Git学习】入门与基础
  • 达芬奇31-40
  • Java技术栈/面试题合集(8)-Redis篇
  • Python爬虫08_Requests聚焦批量爬取图片
  • 如何用分布式架构视角理解宇宙稳定性?从精细调参到微服务的类比思考
  • 微服务架构及常见微服务技术栈
  • PromQL(Prometheus 查询语言)语法详解
  • 2um 精度 + 130mm 深孔扫描:新启航激光频率梳方案重塑 3D 轮廓测量标准
  • 【拓扑序】P6286 [COCI 2016/2017 #1] Cezar|省选-
  • 前端遇到页面卡顿问题,如何排查和解决?
  • DM8日常运维命令总结(四)
  • 游戏画面总是卡顿怎么办 告别延迟畅玩游戏
  • Go语言 泛型
  • TypeScript 中的协变与逆变
  • 203.移除链表元素 707.设计链表 206.反转链表
  • Python ttkbootstrap桌面应用开发示例
  • 创建一个可以edit的graph-node-test的永久登录dashboard的token
  • vue3通过按钮实现横向滚动或鼠标滚动横坐标滚动
  • 预测性维护:数字孪生如何重塑航空航天维修与寿命管理
  • Java技术栈/面试题合集(13)-网络篇
  • 李亚鹤:河南息县:淮河金沙滩开园 再添亲水休闲文旅地
  • 在Maxscript中随机化对象变换、颜色和材质
  • 拖车式变电站:灵活电力供应的“移动堡垒”,驱动全球能源转型新引擎
  • nuxt学习笔记
  • 学术论文命名:策略、方案、方法三者的区别