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'.
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; }
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.
Given that a panic!
will call drop()
as it unwinds, any panic!
in a drop()
implementation will likely abort.
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>
© 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/ops/trait.Drop.html