std::ops::Drop - Rust
Description: API documentation for the Rust `Drop` trait in crate `std`.
Keywords: rust, rustlang, rust-lang, Drop

# Trait std::ops::Drop 1.0.0 [−] [src]

    pub trait Drop {
        fn drop(&mut self);
    }

The `Drop` trait is used to run some code when a value goes out of scope. This is sometimes called a 'destructor'.

# Examples

A trivial implementation of `Drop`. The `drop` method is called when `_x` goes out of scope, and therefore `main` prints `Dropping!`.

    struct HasDrop;

    impl Drop for HasDrop {
        fn drop(&mut self) {
            println!("Dropping!");
        }
    }

    fn main() {
        let _x = HasDrop;
    }Run

## Required Methods

### `fn drop(&mut self)`

A method called when the value goes out of scope.

When this method has been called, `self` has not yet been deallocated. If it were, `self` would be a dangling reference.

After this function is over, the memory of `self` will be deallocated.

This function cannot be called explicitly. This is compiler error E0040. However, the `std::mem::drop` function in the prelude can be used to call the argument's `Drop` implementation.

# Panics

Given that a `panic!` will call `drop()` as it unwinds, any `panic!` in a `drop()` implementation will likely abort.

## Implementors

- `impl<'a, T> Drop for PeekMut<'a, T> where T: Ord`
- `impl<K, V> Drop for BTreeMap<K, V>`
- `impl<K, V> Drop for std::collections::btree_map::IntoIter<K, V>`
- `impl<T> Drop for LinkedList<T>`
- `impl<'a> Drop for std::string::Drain<'a>`
- `impl<T> Drop for Vec<T>`
- `impl<T> Drop for std::vec::IntoIter<T>`
- `impl<'a, T> Drop for std::vec::Drain<'a, T>`
- `impl<T> Drop for VecDeque<T>`
- `impl<'a, T> Drop for std::collections::vec_deque::Drain<'a, T> where T: 'a`
- `impl<T> Drop for IntermediateBox<T> where T: ?Sized`
- `impl<T> Drop for Box<T> where T: ?Sized`
- `impl<T> Drop for Arc<T> where T: ?Sized`
- `impl<T> Drop for std::sync::Weak<T> where T: ?Sized`
- `impl<T> Drop for Rc<T> where T: ?Sized`
- `impl<T> Drop for std::rc::Weak<T> where T: ?Sized`
- `impl<T> Drop for RawVec<T>`
- `impl Drop for CString`
- `impl<W: Write> Drop for BufWriter<W>`
- `impl Drop for Select`
- `impl<'rx, T: Send> Drop for Handle<'rx, T>`
- `impl<T> Drop for Sender<T>`
- `impl<T> Drop for SyncSender<T>`
- `impl<T> Drop for Receiver<T>`
- `impl Drop for Condvar`
- `impl<T: ?Sized> Drop for Mutex<T>`
- `impl<'a, T: ?Sized> Drop for MutexGuard<'a, T>`
- `impl<T: ?Sized> Drop for RwLock<T>`
- `impl<'a, T: ?Sized> Drop for RwLockReadGuard<'a, T>`
- `impl<'a, T: ?Sized> Drop for RwLockWriteGuard<'a, T>`

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)