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
ArcandMutexif 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) オブジェクトを提供します。