14.3 Drop
Drop
trait는 딱 하나의 메소드 drop
만 있고, 이는 객체가 범위에서 벗어날 때 자동으로 호출된다. Drop
trait의 주 사용 목적은 인스턴스 자체에 구현된 자원을 해제하는 것이다.
Box
, Vec
, String
, File
그리고 Process
들이 일부 예로 Drop
trait을 자원 해제를 위해 구현하는 타입이다. Drop
trait 또한 수작업으로 구현되어 모든 사용자 정의 타입에 사용될 수 있다.
다음 예제는 drop
함수에 콘솔 출력을 추가하여 호출될 때 알 수 있게 한다.
struct Droppable { name: &'static str, } // `drop`의 간단한 구현을 추가하여 콘솔에 출력한다. impl Drop for Droppable { fn drop(&mut self) { println!("> Dropping {}", self.name); } } fn main() { let _a = Droppable { name: "a" }; // block A { let _b = Droppable { name: "b" }; // block 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"); // 변수는 `drop`함수를 사용하여 수동으로 삭제될 수 있다. drop(_a); // TODO ^ 해당 라인을 주석 처리해보세요. println!("end of the main function"); // `_a`는 이미 `drop`(수동으로)되었으므로 여기서 다시 `drop`되지 *않을 것*이다. }