pub struct DropGuard<T, F>where
F: FnOnce(T),{ /* private fields */ }
🔬This is a nightly-only experimental API. (
drop_guard
)Expand description
Wrap a value and run a closure when dropped.
This is useful for quickly creating destructors inline.
§Examples
#![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!!!"
}
Implementations§
Source§impl<T, F> DropGuard<T, F>where
F: FnOnce(T),
impl<T, F> DropGuard<T, F>where
F: FnOnce(T),
Sourcepub const fn new(inner: T, f: F) -> DropGuard<T, F>
🔬This is a nightly-only experimental API. (drop_guard
)
pub const fn new(inner: T, f: F) -> DropGuard<T, F>
drop_guard
)Create a new instance of DropGuard
.
§Example
#![feature(drop_guard)]
use std::mem::DropGuard;
let value = String::from("Chashu likes tuna");
let guard = DropGuard::new(value, |s| println!("{s}"));
Sourcepub fn into_inner(guard: DropGuard<T, F>) -> T
🔬This is a nightly-only experimental API. (drop_guard
)
pub fn into_inner(guard: DropGuard<T, F>) -> T
drop_guard
)Consumes the DropGuard
, returning the wrapped value.
This will not execute the closure. This is implemented as an associated
function to prevent any potential conflicts with any other methods called
into_inner
from the Deref
and DerefMut
impls.
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.
§Example
#![feature(drop_guard)]
use std::mem::DropGuard;
let value = String::from("Nori likes chicken");
let guard = DropGuard::new(value, |s| println!("{s}"));
assert_eq!(DropGuard::into_inner(guard), "Nori likes chicken");
Trait Implementations§
Auto Trait Implementations§
impl<T, F> Freeze for DropGuard<T, F>
impl<T, F> RefUnwindSafe for DropGuard<T, F>where
T: RefUnwindSafe,
F: RefUnwindSafe,
impl<T, F> Send for DropGuard<T, F>
impl<T, F> Sync for DropGuard<T, F>
impl<T, F> Unpin for DropGuard<T, F>
impl<T, F> UnwindSafe for DropGuard<T, F>where
T: UnwindSafe,
F: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more