fn main() {
let k = \"fire\";
drop(k);
println!(\"{:?}\", k);
}
Playground
Why am I
What happens when I call
std::mem::drop
with a reference
The reference itself is dropped.
a reference instead of an owned value
A reference is a value.
Why am I still able to use
k
after dropping it?
Because immutable pointers implement Copy
. You pass in a copy of the reference and it's dropped.
Does
drop
not deref a reference automatically?
No, it does not.
what does the implementation of
Drop
look like for&str
?
There isn't one for any kind of reference, immutable or mutable, so it's effectively 1:
impl Drop for &str {
fn drop(&mut self) {}
}
See also:
1 — As Peter Hall points out, there is a difference between having an empty Drop
implementation and having no user-provided Drop
implementation, but for the purposes of this question they are the same.