[][src]Struct clear_on_drop::ClearOnDrop

pub struct ClearOnDrop<P> where
    P: DerefMut,
    P::Target: Clear
{ /* fields omitted */ }

Zeroizes a storage location when dropped.

This struct contains a reference to a memory location, either as a mutable borrow (&mut T), or as a owned container (Box<T> or similar). When this struct is dropped, the referenced location is overwritten with its Default value.

Example

#[derive(Default)]
struct MyData {
    value: u32,
}

let mut place = MyData { value: 0 };
{
    let mut key = ClearOnDrop::new(&mut place);
    key.value = 0x01234567;
    // ...
}   // key is dropped here
assert_eq!(place.value, 0);

Methods

impl<P> ClearOnDrop<P> where
    P: DerefMut,
    P::Target: Clear
[src]

pub fn new(place: P) -> Self[src]

Creates a new ClearOnDrop which clears place on drop.

The place parameter can be a &mut T, a Box<T>, or other containers which behave like Box<T>.

Note: only the first level of dereference will be cleared. Do not use &mut Box<T> or similar as the place, since the heap contents won't be cleared in that case. If you need the place back, use ClearOnDrop::into_place(...) instead of a borrow.

pub fn into_place(c: Self) -> P[src]

Consumes the ClearOnDrop, returning the place after clearing.

Note: this is an associated function, which means that you have to call it as ClearOnDrop::into_place(c) instead of c.into_place(). This is so that there is no conflict with a method on the inner type.

pub fn into_uncleared_place(c: Self) -> P[src]

Consumes the ClearOnDrop, returning the place without clearing.

Note: this is an associated function, which means that you have to call it as ClearOnDrop::into_uncleared_place(c) instead of c.into_uncleared_place(). This is so that there is no conflict with a method on the inner type.

Trait Implementations

impl<P> Debug for ClearOnDrop<P> where
    P: DerefMut + Debug,
    P::Target: Clear
[src]

impl<P, Q> PartialEq<ClearOnDrop<Q>> for ClearOnDrop<P> where
    P: DerefMut + PartialEq<Q>,
    P::Target: Clear,
    Q: DerefMut,
    Q::Target: Clear
[src]

impl<P> Eq for ClearOnDrop<P> where
    P: DerefMut + Eq,
    P::Target: Clear
[src]

impl<P> Ord for ClearOnDrop<P> where
    P: DerefMut + Ord,
    P::Target: Clear
[src]

impl<P, Q> PartialOrd<ClearOnDrop<Q>> for ClearOnDrop<P> where
    P: DerefMut + PartialOrd<Q>,
    P::Target: Clear,
    Q: DerefMut,
    Q::Target: Clear
[src]

impl<P> Deref for ClearOnDrop<P> where
    P: DerefMut,
    P::Target: Clear
[src]

type Target = P::Target

The resulting type after dereferencing.

impl<P> DerefMut for ClearOnDrop<P> where
    P: DerefMut,
    P::Target: Clear
[src]

impl<P> Drop for ClearOnDrop<P> where
    P: DerefMut,
    P::Target: Clear
[src]

impl<P> Hash for ClearOnDrop<P> where
    P: DerefMut + Hash,
    P::Target: Clear
[src]

impl<P, T: ?Sized> AsRef<T> for ClearOnDrop<P> where
    P: DerefMut + AsRef<T>,
    P::Target: Clear
[src]

impl<P, T: ?Sized> AsMut<T> for ClearOnDrop<P> where
    P: DerefMut + AsMut<T>,
    P::Target: Clear
[src]

impl<P> Clone for ClearOnDrop<P> where
    P: DerefMut + Clone,
    P::Target: Clear
[src]

impl<P, T: ?Sized> Borrow<T> for ClearOnDrop<P> where
    P: DerefMut + Borrow<T>,
    P::Target: Clear,
    T: Clear
[src]

impl<P, T: ?Sized> BorrowMut<T> for ClearOnDrop<P> where
    P: DerefMut + BorrowMut<T>,
    P::Target: Clear,
    T: Clear
[src]

Auto Trait Implementations

impl<P> Unpin for ClearOnDrop<P> where
    P: Unpin

impl<P> Send for ClearOnDrop<P> where
    P: Send

impl<P> Sync for ClearOnDrop<P> where
    P: Sync

Blanket Implementations

impl<T> From<T> for T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]