pub struct DropGuard<T, F>where
F: FnOnce(T),{ /* private fields */ }
drop_guard #144426)
Wrap a value and run a closure when dropped.
This is useful for quickly creating destructors inline.
#![feature(drop_guard)]
use std::mem::DropGuard;
{
// Create a new guard around a string that will
// print its value when dropped.
let s = String::from("Chashu likes tuna");
let mut s = DropGuard::new(s, |s| println!("{s}"));
// Modify the string contained in the guard.
s.push_str("!!!");
// The guard will be dropped here, printing:
// "Chashu likes tuna!!!"
}impl<T, F> DropGuard<T, F>where
F: FnOnce(T),pub const fn new(inner: T, f: F) -> DropGuard<T, F>
drop_guard #144426)
Create a new instance of DropGuard.
#![feature(drop_guard)]
use std::mem::DropGuard;
let value = String::from("Chashu likes tuna");
let guard = DropGuard::new(value, |s| println!("{s}"));pub fn dismiss(self) -> T
drop_guard #144426)
Consumes the DropGuard, returning the wrapped value.
This will not execute the closure. It is typically preferred to call this function instead of mem::forget because it will return the stored value and drop variables captured by the closure instead of leaking their owned resources.
#![feature(drop_guard)]
use std::mem::DropGuard;
let value = String::from("Nori likes chicken");
let guard = DropGuard::new(value, |s| println!("{s}"));
assert_eq!(guard.dismiss(), "Nori likes chicken");impl<T, F> Debug for DropGuard<T, F>where
T: Debug,
F: FnOnce(T),fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
impl<T, F> Deref for DropGuard<T, F>where
F: FnOnce(T),type Target = T
fn deref(&self) -> &T
impl<T, F> DerefMut for DropGuard<T, F>where
F: FnOnce(T),fn deref_mut(&mut self) -> &mut T
impl<T, F> Drop for DropGuard<T, F>where
F: FnOnce(T),impl<T, F> Freeze for DropGuard<T, F>where
T: Freeze,
F: Freeze,impl<T, F> RefUnwindSafe for DropGuard<T, F>where
T: RefUnwindSafe,
F: RefUnwindSafe,impl<T, F> Send for DropGuard<T, F>where
T: Send,
F: Send,impl<T, F> Sync for DropGuard<T, F>where
T: Sync,
F: Sync,impl<T, F> Unpin for DropGuard<T, F>where
T: Unpin,
F: Unpin,impl<T, F> UnwindSafe for DropGuard<T, F>where
T: UnwindSafe,
F: UnwindSafe,impl<T> Any for Twhere
T: 'static + ?Sized,impl<T> Borrow<T> for Twhere
T: ?Sized,impl<T> BorrowMut<T> for Twhere
T: ?Sized,impl<T> From<T> for T
fn from(t: T) -> T
Returns the argument unchanged.
impl<T, U> Into<U> for Twhere
U: From<T>,fn into(self) -> U
Calls U::from(self).
That is, this conversion is whatever the implementation of From<T> for U chooses to do.
impl<P, T> Receiver for Pwhere
P: Deref<Target = T> + ?Sized,
T: ?Sized,type Target = T
arbitrary_self_types #44874)
impl<T, U> TryFrom<U> for Twhere
U: Into<T>,type Error = Infallible
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for Twhere
U: TryFrom<T>,
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/mem/struct.DropGuard.html