ManuallyDrop

ManuallyDrop (소멸자 호출 억제 래퍼)

컴파일러가 T의 소멸자를 자동으로 호출하는 것을 억제하는 래퍼예요. 이 래퍼는 0-비용이에요.

출처: Rust 공식 문서

본문

ManuallyDropT와 같은 레이아웃과 비트 유효성을 가지며, T와 같은 레이아웃 최적화가 적용된다고 보장돼요. 결과적으로, 컴파일러가 그 내용에 대해 하는 가정에 영향을 주지 않아요. 예를 들어 mem::zeroedManuallyDrop을 초기화하는 것은 정의되지 않은 동작이에요. 초기화되지 않은 데이터를 다뤄야 한다면 MaybeUninit을 사용하세요.

ManuallyDrop 안의 값에 접근하는 것은 안전하다는 점에 유의하세요. 즉 내용이 이미 드롭된 ManuallyDrop을 공개 안전 API로 노출하면 안 돼요. 이에 대응해, ManuallyDrop::drop은 unsafe예요.

ManuallyDrop과 드롭 순서

Rust는 값의 잘 정의된 드롭 순서를 가져요. 필드나 지역 변수가 특정 순서로 드롭되도록 하려면, 선언을 재정렬해서 필드가 드롭되기 전에 해당 필드가 사용되지 않도록 해야 해요.

pub struct ManuallyDrop<T>
where
    T: ?Sized,
{ /* private fields */ }

더 알아보기 (Learn more)

Rust 공식 문서