gpt4 book ai didi

rust - 当所有权可能在运行时移动时,Rust 编译器如何知道何时调用 drop?

转载 作者:行者123 更新时间:2023-11-29 07:50:06 26 4
gpt4 key购买 nike

<分区>

根据 The Rust Programming Language :

In Rust, you can specify that a particular bit of code be run whenever a value goes out of scope, and the compiler will insert this code automatically

程序员不应该显式地释放一个资源(从Drop trait 调用drop 函数),Rust 将调用drop 每当拥有者超出范围,这是在编译期间完成的,但是如果它取决于运行时,Rust 怎么可能知道何时调用 drop > 信息?

extern crate rand;
use rand::Rng;

struct Foo {}

impl Drop for Foo {
fn drop(&mut self) {
println!("drop occurs");
}
}

fn main() {
let foo = Foo {};
if rand::thread_rng().gen() {
let _t = foo; // move foo to _t
} // 1) drop occurs here if random bool is true
} // 2) drop occurs here if random bool is false

在这段代码中,编译器插入代码释放资源时,drop的调用放在哪里,放1)或者2)?由于在编译时无法知道这一点,我认为调用应该放在两个地方,但只能调用一个以避免悬垂指针。

Rust 如何处理这种情况以保证内存安全?

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