Концепция Ownership в Rust
В языке программирования Rust для управления данными в куче (heap) используется концепция Ownership ("принадлежность", "владение"). Это характерная особенность Rust, позволяющая гарантировать безопасность памяти.
Ownership характеризуется рядом аспектов:
- Каждое значение в языке Rust имеет переменную, которая является "владельцем" (owner).
- У любого значения в один момент времени существует лишь один владелец.
- Если владелец выходит за пределы области, в которой он определен, значение из памяти удаляется, для чего Rust автоматически вызывает функцию
drop() , необходимую для очистки памяти.
Рассмотрим простой пример:
Сначала определим переменную s1. Эта переменная -- владелец строки "hello" (сама строка хранится в куче).
Теперь изменим владельца, присвоив переменной s2 значение s1.
Прежде чем двигаться дальше, вспомним, что у значения может быть лишь один владелец. Именно поэтому переменная s1 перестает быть владельцем. Следовательно, владение строкой "hello" переходит к переменной s2.
Но надо понимать, что в результате переменная s1 становится неинициализированной, те есть использовать ее больше нельзя, иначе будет ошибка при компиляции кода.
Но в принципе в дальнейшем никто ведь не мешает инициализировать переменную s1 заново, присвоив ей какое-нибудь значение:
Меняем владельца в функции
Но что делать, если надо изменить владельца в функции? На самом деле, передавать значение параметра в функцию можно так же, как и при присвоении значения переменной:
Тут значение переменной s1 передается параметру message во время вызова функции
Таким образом, переменная s1 снова теряет владение над строкой "hello", так как это владение переходит к параметру message.
Следовательно, при компиляции мы увидим ту же ошибку на строке:
По материалам https://metanit.com/rust/tutorial/.