Rc
- 1 minref count
https://www.solanazh.com/course/4-4
Cons 是一个枚举类型,在 Rust 中用来表示链表中的节点。在文章中的示例代码中,Cons 包含一个整数值和一个指向下一个 Cons 节点的 Box 智能指针,用来构建链表结构。Cons 节点可以用来构建一个简单的链表数据结构,类似于 C++ 中的前向类声明。
enum List {
Cons(i32, Box<List>),
Nil,
}
use crate::List::{Cons, Nil};
fn main() {
// 链表
let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
let b = Cons(3, Box::new(a)); // 这里所有权已经转移
let c = Cons(4, Box::new(a)); // 报错
}
修改如下:
rc包含了空间内容,和空间计数。 每次 Rc::clone 的时候,都会将计数器+1,同时返回一个 Rc,其中内容指向的是同一个地方,但是引用计数+1。
enum List {
Cons(i32, Rc<List>),
Nil,
}
use crate::List::{Cons, Nil};
use std::rc::Rc;
fn main() {
let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
let b = Cons(3, Rc::clone(&a));// 计数器+1
let c = Cons(4, Rc::clone(&a));// 计数器+1
}