Найти в Дзене

Статья 5: Владение и заимствование в Rust

Одной из ключевых особенностей Rust является его система владения и заимствования, которая обеспечивает безопасность памяти и предотвращает многие ошибки, такие как двойное освобождение или использование неверного указателя. В этой статье мы рассмотрим основы системы владения и заимствования в Rust.

Владение и перемещение данных

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

В примере выше, мы создаем строку original_string, а затем передаем её владение другой переменной new_string. Теперь new_string становится владельцем строки, а original_string теряет своё значение.

Заимствование

Заимствование - это механизм, который позволяет временно получить доступ к значению без владения им. Это позволяет избежать копирования данных и обеспечивает безопасное обращение к значениям, когда они уже имеют владельца.

-2

В примере выше, мы создаем ссылку reference_to_string, которая указывает на значение original_string, но не обладает его владением. Поскольку reference_to_string не обладает владением, оригинальное значение original_string не уничтожается после создания ссылки.

Мутабельные и неизменяемые ссылки

Rust позволяет использовать как неизменяемые (immutable), так и мутабельные (mutable) ссылки. При наличии неизменяемых ссылок, можно иметь несколько одновременных заимствований для чтения, но нельзя одновременно использовать мутабельные ссылки и неизменяемые ссылки. Это правило гарантирует отсутствие состязаний за доступ к данным и предотвращает ошибки данных.

-3

В примере выше, мы создаем мутабельную ссылку reference_to_value для изменения значения переменной value, а затем неизменяемую ссылку reference_to_value_immutable для чтения значения. Обратите внимание, что использование * перед мутабельной ссылкой (*reference_to_value) позволяет получить доступ к самому значению, на которое ссылается reference_to_value.

Задание:

  1. Создайте функцию, которая принимает вектор целых чисел и возвращает среднее значение этого вектора (сумма всех чисел, деленная на количество чисел в векторе).
  2. Напишите программу, которая принимает ввод от пользователя для заполнения вектора числами и затем вызывает созданную функцию для вычисления среднего значения. Выведите результат на экран.

Подсказка: Для чтения пользовательского ввода, используйте функцию read_input() из предыдущих статей. Для вычисления среднего значения, используйте методы вектора, такие как iter(), а также методы заимствования для чтения значений из вектора без владения.