Помилки запозичення

Як конкретний приклад того, як ці правила запозичення запобігають помилкам пам'яті, розглянемо випадок модифікації колекції, коли на її елементи є посилання:

fn main() {
    let mut vec = vec![1, 2, 3, 4, 5];
    let elem = &vec[2];
    vec.push(6);
    println!("{elem}");
}

Аналогічно, розглянемо випадок оголошення ітератора недійсним:

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.
  • В обох випадках модифікація колекції шляхом додавання до неї нових елементів може потенційно зробити недійсними наявні посилання на елементи колекції, якщо колекція буде перерозподілена.