Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Ошибки заимствования

Как конкретный пример того, как эти правила заимствования предотвращают ошибки памяти, рассмотрим изменение коллекции, пока существуют ссылки на её элементы:

// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

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

Аналогично рассмотрим инвалидацию итератора:

// Copyright 2024 Google LLC
// SPDX-License-Identifier: Apache-2.0

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.
  • В обоих случаях изменение коллекции добавлением новых элементов может сделать недействительными существующие ссылки на элементы коллекции, если коллекции придётся перевыделить память.