gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:54:08 28 4
gpt4 key购买 nike

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

drop(k);

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

Playground

为什么我在删除 k 后仍然可以使用它? drop 不会自动取消引用吗?如果是,那为什么? &strDrop 实现是什么样的?

最佳答案

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?

没有任何类型的引用,不可变的或可变的,所以它有效 1:

impl Drop for &str {
fn drop(&mut self) {}
}

另见:


1 — 作为 Peter Hall points out , 有一个空的 Drop 实现和没有用户提供的 Drop 实现是有区别的,但是为了这个问题的目的,他们是一样。

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

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