خطاهای قرضگیری
به عنوان یک مثال ملموس از چگونگی جلوگیری از خطاهای حافظه توسط این قوانین ارجاع، به حالت تغییر یک مجموعه در حالی که ارجاعاتی به عناصر آن وجود دارد، توجه کنید:
fn main() { let mut vec = vec![1, 2, 3, 4, 5]; let elem = &vec[2]; vec.push(6); println!("{elem}"); }
به طور مشابه، به وضعیت نامعتبر شدن تکرارگر (iterator) توجه کنید:
fn main() { let mut vec = vec![1, 2, 3, 4, 5]; for elem in &vec { vec.push(elem * 2); } }
This slide should take about 3 minutes.
- در هر دو مورد، تغییر مجموعه با اضافه کردن عناصر جدید به آن میتواند بهطور بالقوه ارجاعات موجود به عناصر مجموعه را نامعتبر کند، اگر مجموعه نیاز به تخصیص مجدد حافظه داشته باشد.