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