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).