Drop은 소유권 종료 지점에서 정확히 한 번 실행된다

스코프를 벗어나거나 값이 다른 곳으로 이동되면 컴파일러가 정리 지점을 결정한다. 조기 해제도 소유권을 끝내는 방식으로 요청한다.

01 · CREATE먼저 c 생성let c = CustomSmartPointer { … };
02 · CREATE나중에 d 생성

둘 다 현재 블록의 drop scope에 등록

03 · EXIT스코프 이탈

정상 종료·return 등으로 안쪽 scope부터 정리

04 · DROPd → c

같은 스코프의 지역 변수는 선언 역순으로 실행

scope 사이

여러 scope를 한 번에 벗어나면 안쪽에서 바깥쪽 순서다.

값 하나 내부

Drop::drop(&mut self) 뒤에 각 필드 destructor가 실행된다.

struct 필드

필드는 선언 순서로 drop된다. 지역 변수의 역순과 구분한다.

AUTO스코프 종료

호출 없음. 컴파일러가 자동으로 정리한다.

EARLYdrop(c)

c를 함수로 이동해 즉시 정리한다. 이후 사용은 E0382다.

E0040c.drop()

명시적 destructor 호출은 중복 정리를 막기 위해 컴파일 단계에서 거부된다.

검증 기준: std::mem::drop은 마법이 아니라 인수를 소유하는 빈 함수다. 비-Copy 값은 이동되어 정리되지만, Copy 값은 복사본만 버리므로 원본 조기 해제가 되지 않는다.