W3cubDocs

/Rust

Struct DropGuard

pub struct DropGuard<T, F>where
    F: FnOnce(T),{ /* private fields */ }
🔬This is a nightly-only experimental API. (drop_guard #144426)

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),
Source
pub const fn new(inner: T, f: F) -> DropGuard<T, F>
🔬This is a nightly-only experimental API. (drop_guard #144426)

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}"));
Source
pub fn dismiss(self) -> T
🔬This is a nightly-only experimental API. (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.

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!(guard.dismiss(), "Nori likes chicken");

Trait Implementations

Source
impl<T, F> Debug for DropGuard<T, F>where
    T: Debug,
    F: FnOnce(T),
Source
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats the value using the given formatter. Read more
Source
impl<T, F> Deref for DropGuard<T, F>where
    F: FnOnce(T),
Source
type Target = T
The resulting type after dereferencing.
Source
fn deref(&self) -> &T
Dereferences the value.
Source
impl<T, F> DerefMut for DropGuard<T, F>where
    F: FnOnce(T),
Source
fn deref_mut(&mut self) -> &mut T
Mutably dereferences the value.
Source
impl<T, F> Drop for DropGuard<T, F>where
    F: FnOnce(T),
Source
fn drop(&mut self)
Executes the destructor for this type. Read more

Auto Trait Implementations

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,

Blanket Implementations

Source
impl<T> Any for Twhere
    T: 'static + ?Sized,
Source
fn type_id(&self) -> TypeId
Gets the TypeId of self. Read more
Source
impl<T> Borrow<T> for Twhere
    T: ?Sized,
Source
fn borrow(&self) -> &T
Immutably borrows from an owned value. Read more
Source
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source
impl<T> From<T> for T
Source
fn from(t: T) -> T

Returns the argument unchanged.

Source
impl<T, U> Into<U> for Twhere
    U: From<T>,
Source
fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source
impl<P, T> Receiver for Pwhere
    P: Deref<Target = T> + ?Sized,
    T: ?Sized,
Source
type Target = T
🔬This is a nightly-only experimental API. (arbitrary_self_types #44874)
The target type on which the method may be called.
Source
impl<T, U> TryFrom<U> for Twhere
    U: Into<T>,
Source
type Error = Infallible
The type returned in the event of a conversion error.
Source
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
Performs the conversion.
Source
impl<T, U> TryInto<U> for Twhere
    U: TryFrom<T>,
Source
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
Source
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
Performs the conversion.

© 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