Типаж Drop
Типаж Drop
имеет только один метод: drop
, который вызывается автоматически,
когда объект выходит из области видимости. Основное применение типажа Drop
заключается в том, чтобы освободить ресурсы, которыми владеет экземпляр реализации.
Box
, Vec
, String
, File
, и Process
- это некоторые примеры типов, которые
реализуют типаж Drop
для освобождения ресурсов. Типаж Drop
также может быть
реализован вручную для любых индивидуальных типов данных.
В следующем примере мы добавим вывод в консоль к функции drop
, чтобы было видно,
когда она вызывается.
struct Droppable { name: &'static str, } // Это простая реализация `drop`, которая добавляет вывод в консоль. impl Drop for Droppable { fn drop(&mut self) { println!("> Сбросили {}", self.name); } } fn main() { let _a = Droppable { name: "a" }; // блок А { let _b = Droppable { name: "b" }; // блок Б { let _c = Droppable { name: "c" }; let _d = Droppable { name: "d" }; println!("Выходим из блока Б"); } println!("Вышли из блока Б"); println!("Выходим из блока А"); } println!("Вышли из блока А"); // Переменную можно сбросить вручную с помощью функции `drop`. drop(_a); // ЗАДАНИЕ ^ Попробуйте закомментировать эту строку println!("Конец главной функции."); // *Нельзя* сбросить `_a` снова, потому что переменная уже // (вручную) сброшена. }