Rc

- 1 min

ref 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
}