gpt4 book ai didi

rust - 将 Option 实例从 Some 设置为 None 会触发删除内部值吗?

转载 作者:行者123 更新时间:2023-11-29 08:12:00 27 4
gpt4 key购买 nike

我有代码:

struct Foo {}

impl Default for Foo {
fn default() -> Self {
Self {}
}
}

impl Drop for Foo {
fn drop(&mut self) {
// Do something
}
}

fn main() {
{
let foo = Some(Foo::default());
let foo = None; // Would this line trigger `Foo::drop`?
};
{
let mut foo = Some(Foo::default());
foo = None; // Would this line trigger `Foo::drop`?
};
}

foo占用的资源是否被合理释放?

第一种情况(变量被覆盖)不会触发drop,所以加了第二种情况,我也是一头雾水。

最佳答案

let foo = Some(Foo::default());
let foo = None; // Would this line trigger `Foo::drop`?

不, block 的末尾会。

记住 let 是一个变量声明,所以第二行不是修改第一个 foo,而是创建一个新的 foo 隐藏了前者。但它仍然存在(如果您在第二个 let 之前创建对它的引用,则可以访问它)直到 block 的末尾,因此它将在 block 的末尾被丢弃。

如果你想真正改变变量,你必须这样做

let mut foo = Some(Foo::default());
foo = None;

现在它会立即触发丢弃,因为旧值正在被覆盖,所以它必须丢弃它。

关于rust - 将 Option 实例从 Some 设置为 None 会触发删除内部值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56522510/

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