Drop

Trait Drop chỉ có một phương thức: drop, phương thức này sẽ được gọi một cách tự động khi một đối tượng bị ra khỏi scope. Công dụng chính của trait Drop là để giải phóng tài nguyên bộ nhớ mà đối tượng implement nó đang chiếm dụng.

Box, Vec, String, File, và Process là một vài ví dụ về các kiểu có implement trait Drop để giải phóng tài nguyên. Trait Drop cũng có thể được implement cho bất kì các kiểu dữ liệu tùy chỉnh nào.

Ví dụ sau đây thêm vào hàm drop chức năng in ra console để thông báo mỗi khi nó được gọi.

struct Droppable {
    name: &'static str,
}
// Implementation này của `drop` thêm chức năng in ra console.
impl Drop for Droppable {
    fn drop(&mut self) {
        println!("> Dropping {}", self.name);
    }
}
fn main() {
    let _a = Droppable { name: "a" };
    // khối A
    {
        let _b = Droppable { name: "b" };
        // khối B
        {
            let _c = Droppable { name: "c" };
            let _d = Droppable { name: "d" };
            println!("Exiting block B");
        }
        println!("Just exited block B");
        println!("Exiting block A");
    }
    println!("Just exited block A");
    // Biến có thể bị drop một cách thủ công sử dụng hàm `drop`
    drop(_a);
    // TODO ^ Thử biến dòng này thành comment
    println!("end of the main function");
    // `_a` *sẽ không* bị `drop` một lần nữa ở đây vì nó đã bị
    // drop (bằng cách thủ công)
}