pub fn forget<T>(t: T)
Takes ownership and "forgets" about the value without running its destructor.
Any resources the value manages, such as heap memory or a file handle, will linger forever in an unreachable state. However, it does not guarantee that pointers to this memory will remain valid.
- If you want to leak memory, see
- If you want to obtain a raw pointer to the memory, see
- If you want to dispose of a value properly, running its destructor, see
forget is not marked as
unsafe, because Rust's safety guarantees
do not include a guarantee that destructors will always run. For example,
a program can create a reference cycle using
Rc, or call
process::exit to exit without running destructors. Thus, allowing
mem::forget from safe code does not fundamentally change Rust's safety
That said, leaking resources such as memory or I/O objects is usually undesirable,
forget is only recommended for specialized use cases like those shown below.
Because forgetting a value is allowed, any
unsafe code you write must
allow for this possibility. You cannot return a value and expect that the
caller will necessarily run the value's destructor.
Leak an I/O object, never closing the file:
use std::mem; use std::fs::File; let file = File::open("foo.txt").unwrap(); mem::forget(file);Run
The practical use cases for
forget are rather specialized and mainly come
up in unsafe or FFI code.