What happens when I call std::mem::drop with a reference instead of an owned value?

后端 未结 1 504
清酒与你
清酒与你 2021-01-19 16:30
fn main() {
    let k = \"fire\";

    drop(k);

    println!(\"{:?}\", k);
}

Playground

Why am I

相关标签:
1条回答
  • 2021-01-19 17:06

    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:

    • Moved variable still borrowing after calling `drop`?
    • Why does a mutable reference to a dropped object still count as a mutable reference?

    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.

    0 讨论(0)
提交回复
热议问题