【发布时间】:2014-11-13 23:08:52
【问题描述】:
在下面的代码中,“box 5i”在退出“main”作用域时是否被正确释放?他们pointer guide 上的措辞似乎表明,当变量超出范围时,具有框类型的变量就像有一个自动的“free()”调用一样。然而,如果你在这段代码中的“a”上“free()”,它最终只会释放堆上的“box 8i”。 “a”最初指向的“box 5i”会发生什么?
fn foo(a: &mut Box<int>) {
*a = box 8i;
}
fn main() {
let mut a = box 5i;
println!("{}", a); // -> "5"
foo(&mut a);
println!("{}", a); // -> "8"
}
【问题讨论】: