gpt4 book ai didi

reference - 当我用引用而不是拥有的值调用std::mem::drop时会发生什么?

转载 作者:行者123 更新时间:2023-12-03 11:48:36 25 4
gpt4 key购买 nike

fn main() {
let k = "fire";

drop(k);

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

Playground

为什么删除后仍然可以使用 kdrop是否不会自动取消引用引用?如果是,那为什么呢? Drop&str实现是什么样的?

最佳答案

What happens when I call std::mem::drop with a reference



引用本身已删除。

a reference instead of an owned value



引用 一个值。

Why am I still able to use k after dropping it?



因为不可变的指针实现 Copy。您传递引用的副本并将其删除。

Does drop not deref a reference automatically?



不,不是的。

what does the implementation of Drop look like for &str?



没有任何一种引用是不可变的或可变的,因此实际上是一种:
impl Drop for &str {
fn drop(&mut self) {}
}

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


  • 1 —与 Peter Hall points out一样,具有空的 Drop实现和没有用户提供的 Drop实现之间是有区别的,但是出于这个问题的目的,它们是相同的。

    关于reference - 当我用引用而不是拥有的值调用std::mem::drop时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62052614/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com