Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsSpSpDr 96 of 288 menu
◀ ▶

Конец значения и трейт Drop в Rust

Когда имя выходит из области видимости, компилятор обычно освобождает память и вызывает код очистки для типа. Для своих структур можно задать дополнительный шаг: трейт конца с методом, который получает изменяемую ссылку на значение перед уничтожением.

Такой метод не нужно вызывать вручную в обычном коде: его подставляет компилятор в момент, когда значение больше не живет. Удобно печатать отладочное сообщение, закрывать ресурс или снимать регистрацию в учебном примере.

Добавим трейт конца к простой структуре:

struct Gate { name: &'static str, } impl Drop for Gate { fn drop(&mut self) { println!("end {}", self.name); } } fn main() { let g = Gate { name: "main" }; println!("work"); }

Сначала напечатается "work", затем строка с "end main", когда g заканчивается в конце main.

Внутренний блок тоже завершает значение раньше, чем вся функция:

struct Gate { tag: i32, } impl Drop for Gate { fn drop(&mut self) { println!("end {}", self.tag); } } fn main() { { let inner = Gate { tag: 2 }; println!("block"); } println!("after"); }

Дана структура:

struct Note { text: &'static str, }

Реализуйте трейт конца, который печатает text, создайте значение в main и убедитесь, что сообщение идет после последней строки функции.

Дано число:

let num = 9;

Оберните литерал в структуру с одним полем, в drop выведите поле и положите значение во внутренний блок, чтобы увидеть конец до строки после блока.

Скажите, когда компилятор вызывает метод трейта конца относительно выхода имени из области видимости.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить