我在周末阅读了Rust的《Rust编程之道》,对所有权这一概念有些疑惑。我的理解是,所有权用于静态地确定资源的释放位置。现在,假设我们有以下代码:
{ // 1
let x; // 2
{ // 3
let y = Box::new(1); // 4
x = if flip_coin() {y} else {Box::new(2)} // 5
} // 6
} // 7
我很惊讶地发现编译器接受了这个程序。通过插入println!
并为包含值1的盒子实现Drop
特质,我看到该盒子将在第6或第7行根据flip_coin
的返回值被回收。编译器如何知道何时回收该盒子?这是使用某些运行时信息(例如指示盒子是否仍在使用的标志)在运行时决定的吗?