Rc
Rc は参照カウント方式の共有ポインタです。複数の場所から同じデータを参照 する必要がある場合に使用します:
// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 use std::rc::Rc; fn main() { let a = Rc::new(10); let b = Rc::clone(&a); dbg!(a); dbg!(b); }
各 Rc は、強参照と弱参照、および値を含む同じ共有データ構造を 指します:
Rcの参照カウントにより、参照が存在する限り内部の値が有効であることが 保証されます。- Rust の
Rcは C++ のstd::shared_ptrのようなものです。 Rc::cloneは低コストです。同じアロケーションへのポインタを作成し、 参照カウントを増やします。ディープクローンは行わないため、通常はコードの パフォーマンス問題を調べる際に無視できます。make_mutは必要に応じて実際に内部の値をクローンし(“clone-on-write”)、 可変参照を返します。- 参照カウントを確認するには
Rc::strong_countを使用します。 Rc::downgradeを使うと、適切にドロップされる循環参照を作成するための 弱い参照カウントを持つ オブジェクトが得られます(多くの場合RefCellと 組み合わせて使用します)。