Rc

Rc referans sayımlı (reference-counted) bir paylaşılan göstericidir. Aynı veriye birden çok yerden referans vermeniz gerektiğinde bunu kullanın:

use std::rc::Rc;

fn main() {
    let a = Rc::new(10);
    let b = Rc::clone(&a);

    dbg!(a);
    dbg!(b);
}

Her Rc, güçlü (strong) ve zayıf (weak) göstericileri ve değeri içeren aynı paylaşılan veri yapısına işaret eder:

StackHeapcount:2value:10a:b:
  • Çok iş parçacıklı (multi-threaded) bir bağlamdaysanız Arc ve Mutex’e bakın.
  • Düşürülecek (drop) döngüler oluşturmak için paylaşılan bir göstericiyi bir Weak göstericiye düşürebilirsiniz (downgrade).
This slide should take about 5 minutes.
  • Rc’nin sayımı, içerdiği değerin referanslar olduğu sürece geçerli olmasını sağlar.
  • Rust’taki Rc, C++’daki std::shared_ptr’e benzer.
  • Rc::clone ucuzdur: aynı tahsise bir gösterici oluşturur ve referans sayısını artırır. Derin bir klon (deep clone) yapmaz ve genellikle koddaki performans sorunlarını ararken göz ardı edilebilir.
  • make_mut aslında gerekirse iç değeri klonlar (“yazmada-klonla / clone-on-write”) ve değiştirilebilir (mutable) bir referans döndürür.
  • Referans sayısını kontrol etmek için Rc::strong_count kullanın.
  • Rc::downgrade size düzgün bir şekilde düşürülecek (drop) döngüler oluşturmak için zayıf referans sayımlı (weakly reference-counted) bir nesne verir (muhtemelen RefCell ile kombinasyon halinde).