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