大部分狀況下全部權是很是明確的:能夠準確的知道哪一個變量擁有某個值。然而,有些狀況單個值可能會有多個全部者。例如,在圖數據結構中,多個邊可能指向相同的結點,而這個結點從概念上講爲全部指向它的邊所擁有。結點直到沒有任何邊指向它以前都不該該被清理。數據結構
爲了啓用多全部權,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)); }