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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值