Rust errors / Everything else
Rust compiler error · checked with rustc 1.99.0
Rust error E0040: explicit use of destructor method
What it meansIt is not allowed to manually call destructors in Rust.
What rustc prints
error[E0040]: explicit use of destructor method --> main.rs:13:7 | 13 | x.drop(); // error: explicit use of destructor method | ^^^^ explicit destructor calls not allowed | help: consider using `drop` function | 13 - x.drop(); // error: explicit use of destructor method 13 + drop(x); // error: explicit use of destructor method |
Real output of rustc 1.99.0 compiling the official example below (2021 edition). Your names and line numbers will differ; the first line is the part to match.
The compiler team's explanation
It is not allowed to manually call destructors in Rust.
Erroneous code example:
struct Foo {
x: i32,
}
impl Drop for Foo {
fn drop(&mut self) {
println!("kaboom");
}
}
fn main() {
let mut x = Foo { x: -7 };
x.drop(); // error: explicit use of destructor method
}
It is unnecessary to do this since drop is called automatically whenever a value goes out of scope. However, if you really need to drop a value by hand, you can use the std::mem::drop function:
struct Foo {
x: i32,
}
impl Drop for Foo {
fn drop(&mut self) {
println!("kaboom");
}
}
fn main() {
let mut x = Foo { x: -7 };
drop(x); // ok!
}From rustc --explain E0040 (1.99.0), part of the Rust project, MIT or Apache-2.0. Official page.
Related errors
- E0061this function takes N arguments but M were supplied
- E0412cannot find type in this scope
- E0515cannot return reference to local variable
- E0728await is only allowed inside async functions and blocks
- E0045C-variadic functions with the "Rust" calling convention are not supported
- E0054cannot cast `i32` as `bool`
Up next
Often hit nextE0061: this function takes N arguments but M were suppliedA related error from the same family.Read it next →Did this answer your question?