当前位置: 首页 > 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.lryc.cn/news/610992.html

相关文章:

  • linux查看kafka的消费组里是否有积压
  • 带 TrustZone 的按键点灯工程示例
  • 【C++篇】C++11:右值引用与移动语义
  • mac安装pycharm
  • CVPR优秀论文 | DashGaussian:在200秒内优化三维高斯点绘制
  • 蓝桥杯常用java API
  • 『 C++ 入门到放弃 』- 智能指针
  • 飞算JavaAI—AI编程助手 | 引领开发新时代,智能化编程的完美助手
  • 从「同步」到「异步」:用 aiohttp 把 Python 网络 I/O 榨到极致
  • Vue.js之核心语法与指令
  • 网络 —— 笔记本(主机)、主机虚拟机(Windows、Ubuntu)、手机(笔记本热点),三者进行相互ping通
  • 初始MyBatis
  • LabVIEW 2025 安装攻略(附图文教程)适用于测试与自动控制领域
  • MySQL 查询性能优化与索引失效问题全解析
  • 使用公众号的消息模板给关注用户发消息
  • MySQL CONV()函数
  • spring webflux链路跟踪【traceId日志自动打印】
  • 移动端 WebView 调试实战 深色模式样式失效与主题切换异常排查指南
  • 前端1.0
  • Lua语言程序设计1:基础知识、数值、字符串与表
  • 针对软件定义车载网络的动态服务导向机制
  • linux_https,udp,tcp协议(更新中)
  • 实战项目3-工控软件-2.0- 自定义控件HMILabel的创建
  • 漏洞分析:90分钟安全革命
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:Quad-SPl Flash 闪存控制器
  • 信息系统项目管理中的沟通管理实战精解
  • 智慧油站误报率↓77%:陌讯多模态融合算法实战解析
  • 【Git】git提交代码报错Git: husky > pre-commit
  • 【Java面试题】注解,异常相关知识
  • 二维数点问题 1