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