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

Владение ownership

Владение ownership - это ключевая система в Rust, обеспечивающая безопасность памяти без сборщика мусора. Каждое значение в Rust имеет ровно одного владельца. Когда владелец выходит из области видимости, значение автоматически освобождается. Передача владения происходит при присваивании или передаче значения в функцию. Параметром здесь выступает само значение, которое перемещается от одного владельца к другому.

Синтаксис

let owner = value; // owner становится владельцем value

Пример

Давайте создадим переменную s, которая владеет строкой, и передадим владение переменной s2:

fn main() { let s = String::from("abcde"); let s2 = s; println!("{}", s2); }

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

"abcde"

Пример

После передачи владения переменная s больше не может использоваться. Давайте попробуем обратиться к ней:

fn main() { let s = String::from("abcde"); let s2 = s; println!("{}", s); }

Компилятор выдаст ошибку, так как владение уже перемещено в s2:

error[E0382]: borrow of moved value: `s`

Пример

Владение также передаётся при вызове функции. Давайте передадим строку в функцию take_ownership:

fn take_ownership(s: String) { println!("{}", s); } fn main() { let s = String::from("12345"); take_ownership(s); }

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

"12345"

Пример

Если тип реализует трейт Copy, то владение не перемещается, а копируется. Давайте рассмотрим это на примере целых чисел:

fn main() { let x = 5; let y = x; println!("x = {}, y = {}", x, y); }

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

x = 5, y = 5

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

  • оператор move,
    который перемещает владение значением
  • трейт Copy,
    который позволяет копировать значение вместо перемещения
  • метод clone,
    который создаёт глубокую копию значения
  • механизм заимствования,
    который позволяет использовать значение без передачи владения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить