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`되지 *않을 것*이다.
}

results matching ""

    No results matching ""