Erros de Empréstimo

Como um exemplo concreto de como essas regras de empréstimo evitam erros de memória, considere o caso de modificar uma coleção enquanto há referências para os seus elementos:

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

Da mesma forma, considere o caso de invalidação do iterador:

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.
  • Em ambos os casos, modificar a coleção ao adicionar novos elementos a ela pode potencialmente invalidar referências existentes para os elementos da coleção se a coleção tiver que realocar.