Rust · Drop

Drop 자동 호출과 std::mem::drop은 호출 주체가 다르다

Drop::drop은 컴파일러가 스코프 끝에 호출하고, std::mem::drop은 값을 소비해 즉시 소유권을 끝냅니다.

automatic

스코프 종료 해제

1

값 생성

소유자가 살아 있는 동안 참조와 메서드 호출이 허용됩니다.

2

역순 drop

지역 변수는 나중에 만든 값부터 Drop::drop이 실행됩니다.

3

한 번만 호출

컴파일러가 남은 참조와 이동 상태를 검사해 double free를 막습니다.

early

명시적 조기 해제

1

값을 소비

drop(c)는 값을 인수로 받아 소유권을 가져갑니다.

std::mem::drop(c)
2

즉시 drop

MutexGuard, 큰 Vec 버퍼, 임시 File 핸들처럼 빨리 놓아야 할 자원을 해제합니다.

3

재사용 불가

소비된 값은 이후 코드에서 다시 사용할 수 없고 E0382가 발생합니다.

Drop::drop

fn drop(&mut self)로 RAII 해제 로직을 정의합니다.

drop(value)

값을 소비해 스코프 끝보다 먼저 해제하고 재사용을 막습니다.

직접 호출 금지

value.drop()은 E0040으로 거부됩니다.