РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
474 of 1245 menu

Время жизни

Время жизни (lifetime) - это параметр, который указывает, как долго ссылка остаётся действительной. Компилятор Rust использует времена жизни, чтобы гарантировать безопасность памяти без сборщика мусора. Времена жизни обозначаются апострофом и именем, например 'a, 'b или 'static.

Времена жизни не влияют на время выполнения программы. Они нужны только компилятору для анализа заимствований. Чаще всего времена жизни указываются в функциях, которые принимают или возвращают ссылки, а также в структурах, хранящих ссылки.

Синтаксис

&'a T &'a mut T fn name<'a>(x: &'a T) -> &'a T

Пример

Давайте рассмотрим функцию, которая возвращает ссылку на более длинную из двух строковых срезов:

fn longest<'a>(x: &'a str, y: &'a str) -> &'a str { if x.len() > y.len() { x } else { y } } fn main() { let s1 = "abcde"; let s2 = "12345"; let res = longest(s1, s2); println!("{}", res); }

Результат выполнения кода:

"abcde"

Пример

Давайте рассмотрим структуру, которая хранит ссылку на строковый срез:

struct Holder<'a> { text: &'a str, } fn main() { let s = "abcde"; let holder = Holder { text: s }; println!("{}", holder.text); }

Результат выполнения кода:

"abcde"

Пример

Давайте рассмотрим статическое время жизни 'static, которое означает, что ссылка действительна на протяжении всей программы:

fn get_text() -> &'static str { "abcde" } fn main() { let res = get_text(); println!("{}", res); }

Результат выполнения кода:

"abcde"

Смотрите также

  • ключевое слово borrowing,
    которое позволяет использовать данные без передачи владения
  • ключевое слово borrow-rules,
    которые определяют правила заимствования в Rust
  • ключевое слово static-lifetime,
    которое обозначает время жизни на протяжении всей программы
  • ключевое слово lifetime-elision,
    которое позволяет опускать времена жизни в простых случаях
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить