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

Перемещение move

Перемещение move - это механизм в Rust, при котором владение значением передаётся от одной переменной к другой. После перемещения исходная переменная становится недоступной для использования, так как владение уже принадлежит новой переменной. Перемещение происходит автоматически при присваивании, передаче значения в функцию или возврате из функции для типов, не реализующих трейт Copy.

Перемещение помогает Rust гарантировать безопасность работы с памятью без сборщика мусора: каждое значение имеет ровно одного владельца в каждый момент времени.

Синтаксис

let new_var = old_var;

После такой операции old_var перемещается в new_var, и обращение к old_var становится ошибкой компиляции.

Пример

Давайте переместим значение строки из одной переменной в другую и выведем результат:

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

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

"abcde"

Пример

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

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

Компилятор выдаст ошибку:

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

Пример

Перемещение также происходит при передаче значения в функцию. После вызова переменная становится недоступной:

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

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

"12345"

Пример

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

fn main() { let a = 12345; let b = a; println!("{}", a); println!("{}", b); }

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

12345 12345

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

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