問題一覧に戻る
中級スマートポインタ
問題81: スマートポインタ - Rc

Rc'<'T'>'(参照カウント)は同じデータの複数所有を可能にします。参照数を追跡し、カウントがゼロになると解放します。Rc::cloneで新しい参照を作成 - カウントを増やすだけでディープコピーしません。Rcはシングルスレッド専用で、マルチスレッドにはArcを使用。共有不変データ構造に最適です。

use std::rc::;

fn main() {
// Rcの作成
let a = ::new(5);
println!("count = {}", Rc::strong_count(&a));

// Rcのクローン
let b = Rc::();
println!("count = {}", Rc::strong_count(&a));

{
// 内部スコープ
let c = Rc::clone(&a);
println!("inner count = {}", Rc::(&a));
}

// スコープ後
println!("count = {}", Rc::strong_count(&a));

// 共有データ
let data = Rc::new(vec![1, 2, 3]);
let d1 = ::clone(&data);
let d2 = Rc::clone(&);

println!("data: {:?}", data);
println!("d1: {:?}", d1);
println!("d2: {:?}", d2);
}