Drop Flow

값 생성부터 자원 정리까지

Drop은 스코프 끝에서 자동 실행되고, 조기 정리가 필요하면 std::mem::drop으로 소유권을 넘겨 바로 실행한다.

1

값 생성

c와 d가 만들어지고 각 값은 정리할 자원을 소유한다.

2

사용 완료

스코프 끝 또는 명시 호출 지점에서 소유권의 끝이 결정된다.

3

역순 drop

자동 정리는 나중에 만든 d를 c보다 먼저 버린다.

4

자원 해제

drop 메서드 안의 파일, 락, 메모리 정리 코드가 실행된다.

5

조기 정리

drop(c)는 c를 이동시켜 그 자리에서 정리하고 재사용을 막는다.

스코프 종료 경로

automatic
main 끝 컴파일러가 drop 삽입
d 먼저 other stuff 정리
c 다음 my stuff 정리

std::mem::drop 경로

explicit
drop(c) c의 소유권 이동
즉시 Drop::drop 실행
이후 c 재사용 불가
Safety

Drop::drop을 직접 부르지 못하게 하고, std::mem::drop은 값을 이동시키기 때문에 같은 자원을 두 번 정리하는 상황을 막는다.