Rc

Rc は、参照カウントされた共有ポインタです。複数の場所から同じデータを参照する必要がある場合に使用します。

use std::rc::Rc;

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

    println!("a: {a}");
    println!("b: {b}");
}
  • See Arc and Mutex if you are in a multi-threaded context.
  • 共有ポインタを Weak ポインタにダウングレード (downgrade) すると、ドロップされるサイクルを作成できます。
This slide should take about 5 minutes.
  • Rc のカウントは、参照がある限り有効であることを保証します。
  • Rust の Rc は C++ の std::shared_ptr に似ています。
  • Rc::cloneの動作は軽量です。同じ割り当て領域へのポインタを作成し、参照カウントを増やすだけです。デープクローンを作成しないので、性能上の問題箇所をコードから探す場合には通常無視することが出来ます。
  • make_mut は、必要に応じて内部の値のクローンを作成し(「clone-on-write」)、可変参照を返します。
  • Rc::strong_count を使用して参照カウントを確認します。
  • Rc::downgrade は、(多くの場合、RefCell と組み合わせて)適切にドロップされるサイクルを作成するための弱参照カウント (weakly reference-counted) オブジェクトを提供します。