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

Время жизни lifetime

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

Синтаксис

fn function_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); }

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

"12345"

Пример

Давайте посмотрим, как время жизни работает внутри структуры. Структура Holder хранит ссылку на строку и должна быть параметризована временем жизни:

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

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

"abcde"

Пример

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

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

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

"abcde"

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

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