根据The Rust Programming Language:
在Rust中,您可以指定每当值超出范围时运行特定代码,并且编译器将自动插入此代码。
程序员不应显式释放资源(从
在这段代码中,当编译器插入释放资源的代码时,
在Rust中,您可以指定每当值超出范围时运行特定代码,并且编译器将自动插入此代码。
程序员不应显式释放资源(从
Drop
特征调用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如何处理这种情况以确保内存安全?