Вопрос помогает проверить понимание концепции заимствования данных и их жизненного цикла в Rust.
При заимствовании данных их владение остаётся у первоначального владельца, а не передаётся функции. Поэтому данные остаются доступными после завершения функции.
В Rust заимствование данных происходит с использованием ссылок, что позволяет функции временно использовать данные без их полного владения. Ссылки бывают двух типов: неизменяемые (&T) и изменяемые (&mut T).
Пример заимствования:
fn print_value(value: &i32) {
println!("Value: {}", value);
}
fn main() {
let num = 10;
print_value(&num);
println!("Original number: {}", num); // работает, так как владение не передано
}
Особенности:
- Заимствование через ссылку не разрушает оригинальные данные.
- Функция, использующая заимствование, не может изменять данные (если это не изменяемая ссылка).
Когда владение передаётся? Владение передаётся, если функция принимает данные напрямую (без ссылки). Например:
fn consume_value(value: String) {
println!("Consumed: {}", value);
}
fn main() {
let msg = String::from("Hello");
consume_value(msg);
// println!("{}", msg); // Ошибка: владение передано и msg больше недоступен
}
Заимствование — это механизм, который позволяет использовать данные без их переноса. Владение остаётся у вызывающего кода, что обеспечивает безопасность.