Rust进阶-part4-智能指针2
Rust进阶[part4]_智能指针2
Rc<T>
Rc<T>
(Reference Counted)是 Rust 标准库提供的单线程共享所有权智能指针,通过引用计数实现多所有权管理。以下是其核心特性与使用场景
核心特性
-
引用计数:
-
每个实例在堆上存储:
-
实际数据
T
-
引用计数器(记录活跃引用数量)
-
克隆时只增加计数器,不会深拷贝数据:
let a = Rc::new(vec![1,2,3]); let b = a.clone(); // 计数器从1→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