Rc

Rc 是參考計數的共用指標。如要在多個位置參考相同的資料,可以使用這個指標:

use std::rc::Rc;

fn main() {
    let mut a = Rc::new(10);
    let mut b = Rc::clone(&a);

    println!("a: {a}");
    println!("b: {b}");
}
  • 如果您處於多執行緒的環境,請參閱 ArcMutex
  • 您可以將共用指標「降級」為 Weak 指標,以便建立之後會捨棄的循環。
  • Rc 的計數可確保只要有參考,內含的值就會保持有效。
  • Rust 中的 Rc 就像 C++ 中的 std::shared_ptr 一樣。
  • Rc::clone 的成本很低:這個做法會建立指向相同配置的指標,並增加參考計數,而不會產生深克隆,尋找程式碼效能問題時通常可以忽略。
  • make_mut 實際上會在必要時克隆內部值 (「clone-on-write」),並回傳可變動的參考。
  • 使用 Rc::strong_count 可查看參考計數。
  • Rc::downgrade gives you a weakly reference-counted object to create cycles that will be dropped properly (likely in combination with RefCell, on the next slide).