Времена жизни

Время жизни - это конструкция, которую компилятор (или более конкретно, его анализатор заимствований) использует, чтобы убедиться, что все заимствования действительны. В частности время жизни переменной начинается с момента её создания и заканчивается когда она уничтожается. Времена жизни и области видимости упоминаются часто вместе, но они не совпадают.

Возьмём, например, случай когда мы заимствуем переменную через &. Срок действия заимствования определяется местом его объявления. В результате, заимствование действительно до тех пор, пока оно не закончится или пока кредитор не будет уничтожен. Однако, область заимствования определяется местом использования ссылки.

В следующем примере и в остальной части этого раздела мы увидим, как времена жизни связаны с областями видимости, а также как они различаются.

// Времена жизни аннотированы линиями, обозначающими

// создание и уничтожение каждой переменной.

// `i` имеет самое длинное время жизни, так как его область охватывает

// полностью оба заимствования `borrow1` и `borrow2`.

// Продолжительность заимствования `borrow1` по сравнению с

// заимствованием `borrow2` не имеет значения, так как они не пересекаются.

fn main() {

let i = 3; // Lifetime for `i` starts. ────────────────┐

//                                                     │

{ //                                                   │

let borrow1 = &i; // `borrow1` lifetime starts. ──┐│

//                                                ││

println!("borrow1: {}", borrow1); //              ││

} // `borrow1 ends. ──────────────────────────────────┘│

//                                                     │

//                                                     │

{ //                                                   │

let borrow2 = &i; // `borrow2` lifetime starts. ──┐│

//                                                ││

println!("borrow2: {}", borrow2); //              ││

} // `borrow2` ends. ─────────────────────────────────┘│

//                                                     │

}   // Lifetime ends. ─────────────────────────────────────┘

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Обратите внимание, что для меток времени жизни не назначаются имена или типы. Это ограничивает то, как время жизни будет использоваться, как мы увидим далее.

Загрузка...