大部分状况下全部权是很是明确的:能够准确的知道哪一个变量拥有某个值。然而,有些状况单个值可能会有多个全部者。例如,在图数据结构中,多个边可能指向相同的结点,而这个结点从概念上讲为全部指向它的边所拥有。结点直到没有任何边指向它以前都不该该被清理。数据结构
为了启用多全部权,Rust 有一个叫作 Rc<T>
的类型。其名称为 引用计数(reference counting)的缩写。引用计数意味着记录一个值引用的数量来知晓这个值是否仍在被使用。若是某个值有零个引用,就表明没有任何有效引用并能够被清理。spa
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))))); println!("count after creating a = {}", Rc::strong_count(&a)); let b = Cons(3, Rc::clone(&a)); println!("count after creating b = {}", Rc::strong_count(&a)); { let c = Cons(4, Rc::clone(&a)); println!("count after creating c = {}", Rc::strong_count(&a)); } println!("count after c goes out of scope = {}", Rc::strong_count(&a)); }