1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
mod impls;
pub use ::situ_derive::DropRaw;
use crate::Mut;
/// A type that can be dropped through a raw pointer, without creating an
/// intermediary reference.
///
/// This is different from `ptr::drop_in_place` because it does not invoke
/// `Drop::drop` with a mutable reference. `DropRaw::drop_raw` is the last
/// method called with access to the value; effectively a raw version of `Drop`.
/// This is to avoid creating an intermediate reference, which narrows
/// provenance for the dropped value.
///
/// Types that implement `Copy` may have their raw drops elided.
pub trait DropRaw {
/// Drops the value pointed to by `this`.
///
/// # Safety
///
/// - The value pointed to by `this` must be valid for dropping.
/// - After calling `drop_raw`, the value pointed to by `this` must never be
/// accessed again.
unsafe fn drop_raw(this: Mut<'_, Self>);
}