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 は、強参照と弱参照、および値を含む同じ共有データ構造を 指します:

StackHeapcount:2value:10a:b:
  • マルチスレッドのコンテキストでは ArcMutex を参照して ください。
  • 共有ポインタを Weak ポインタへ ダウングレード して、適切に ドロップされる循環参照を作成できます。
  • Rc の参照カウントにより、参照が存在する限り内部の値が有効であることが 保証されます。
  • Rust の Rc は C++ の std::shared_ptr のようなものです。
  • Rc::clone は低コストです。同じアロケーションへのポインタを作成し、 参照カウントを増やします。ディープクローンは行わないため、通常はコードの パフォーマンス問題を調べる際に無視できます。
  • make_mut は必要に応じて実際に内部の値をクローンし(“clone-on-write”)、 可変参照を返します。
  • 参照カウントを確認するには Rc::strong_count を使用します。
  • Rc::downgrade を使うと、適切にドロップされる循環参照を作成するための 弱い参照カウントを持つ オブジェクトが得られます(多くの場合 RefCell と 組み合わせて使用します)。