Rc

Rc یک اشاره‌گر مشترک با شمارش ارجاع است. از این هنگام استفاده کنید که نیاز دارید به داده‌های یکسان از مکان‌های متعدد اشاره کنید:

use std::rc::Rc;

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

    println!("a: {a}");
    println!("b: {b}");
}
  • اگر در یک محیط چند-رشته‌ای (multi-threaded) هستید، به Arc و Mutex نگاه کنید.
  • شما می‌توانید یک اشاره‌گر مشترک را به یک اشاره‌گر Weak تغییر دهید تا دوره‌هایی ایجاد کنید که در نهایت حذف خواهند شد.
This slide should take about 5 minutes.
  • شمارش Rc تضمین می‌کند که مقدار درون آن به مدت زمانی که ارجاع‌هایی وجود دارد، معتبر خواهد بود.
  • Rc در Rust مشابه std::shared_ptr در ++C است.
  • Rc::clone ارزان است: این تابع یک اشاره‌گر به همان تخصیص (allocation) ایجاد می‌کند و شمارش ارجاع را افزایش می‌دهد. این عمل کپی عمیق (deep clone) انجام نمی‌دهد و به طور کلی هنگام جستجو برای مسائل عملکردی در کد می‌توان آن را نادیده گرفت.
  • make_mut در واقع در صورت نیاز مقدار درونی را کپی می‌کند ("clone-on-write") و یک ارجاع قابل تغییر (mutable reference) برمی‌گرداند.
  • از Rc::strong_count برای بررسی شمارش ارجاع‌ها استفاده کنید.
  • Rc::downgrade یک شیء با شمارش ارجاع ضعیف به شما می‌دهد تا دوره‌هایی ایجاد کنید که به درستی حذف خواهند شد (احتمالاً به همراه RefCell).