Концепция Ownership в Rust | OTUS
Скидка до 15% на курсы ноября, декабря и января
❄️ До 20.12 Забрать скидку! →
Выбрать курс

Концепция Ownership в Rust

В языке программирования Rust для управления данными в куче (heap) используется концепция Ownership ("принадлежность", "владение"). Это характерная особенность Rust, позволяющая гарантировать безопасность памяти.

Ownership характеризуется рядом аспектов:

  1. Каждое значение в языке Rust имеет переменную, которая является "владельцем" (owner).
  2. У любого значения в один момент времени существует лишь один владелец.
  3. Если владелец выходит за пределы области, в которой он определен, значение из памяти удаляется, для чего Rust автоматически вызывает функцию drop(), необходимую для очистки памяти.

Рассмотрим простой пример:

1-1801-66f7cd.png

Сначала определим переменную s1. Эта переменная -- владелец строки "hello" (сама строка хранится в куче).

2-1801-817207.png

Теперь изменим владельца, присвоив переменной s2 значение s1.

3-1801-95d75e.png

Прежде чем двигаться дальше, вспомним, что у значения может быть лишь один владелец. Именно поэтому переменная s1 перестает быть владельцем. Следовательно, владение строкой "hello" переходит к переменной s2.

4-1801-d76589.png

Но надо понимать, что в результате переменная s1 становится неинициализированной, те есть использовать ее больше нельзя, иначе будет ошибка при компиляции кода.

5-1801-77ce63.png

6-1801-c66a20.png

Но в принципе в дальнейшем никто ведь не мешает инициализировать переменную s1 заново, присвоив ей какое-нибудь значение:

7-1801-eaae42.png

Меняем владельца в функции

Но что делать, если надо изменить владельца в функции? На самом деле, передавать значение параметра в функцию можно так же, как и при присвоении значения переменной:

1-1801-bd404e.png

Тут значение переменной s1 передается параметру message во время вызова функции display_message():

2-1801-6dd5d6.png

Таким образом, переменная s1 снова теряет владение над строкой "hello", так как это владение переходит к параметру message.

Следовательно, при компиляции мы увидим ту же ошибку на строке:

3-1801-caff07.png

По материалам https://metanit.com/rust/tutorial/.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Новогодние скидки в Otus!-15% ❄️
Успейте забрать свою скидку до 20.12 →