Rc<T>:引用计数
基本用法
rust
▶ Runuse std::rc::Rc;
fn main() {
// 创建引用计数
let a = Rc::new(String::from("Hello"));
// 克隆(增加引用计数,不复制数据)
let b = Rc::clone(&a);
let c = Rc::clone(&a);
// 引用计数
println!("引用计数:{}", Rc::strong_count(&a)); // 3
// 检查是否唯一
if Rc::unique(&a) {
println!("a 是唯一引用");
} else {
println!("a 有多个引用"); // 输出这个
}
drop(b);
println!("引用计数:{}", Rc::strong_count(&a)); // 2
drop(c);
println!("引用计数:{}", Rc::strong_count(&a)); // 1
} // 引用计数为 0,数据释放使用场景:共享所有权
rust
▶ Runuse std::rc::Rc;
enum List {
Cons(i32, Rc<List>),
Nil,
}
use List::{Cons, Nil};
fn main() {
let a = Rc::new(Cons(1, Rc::new(Cons(2, Rc::new(Nil)))));
println!("初始计数:{}", Rc::strong_count(&a)); // 1
// b 和 c 共享 a 的数据
let b = Cons(3, Rc::clone(&a));
println!("创建 b 后:{}", Rc::strong_count(&a)); // 2
let c = Cons(4, Rc::clone(&a));
println!("创建 c 后:{}", Rc::strong_count(&a)); // 3
// a, b, c 都指向相同的尾部
}