Владение
У каждой привязки переменной есть область видимости, в которой она действительна, и использовать переменную вне её области видимости — ошибка:
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
struct Point(i32, i32);
fn main() {
{
let p = Point(3, 4);
dbg!(p.0);
}
dbg!(p.1);
}
Говорят, что переменная владеет значением. Каждое значение в Rust всегда имеет ровно одного владельца.
В конце области видимости переменная освобождается (dropped), и данные освобождаются. Здесь может выполниться деструктор, чтобы освободить ресурсы.
This slide should take about 5 minutes.
Студенты, знакомые с реализациями сборки мусора, знают, что сборщик мусора начинает с набора «корней», чтобы найти всю достижимую память. Принцип «единственного владельца» в Rust — похожая идея.