Rustで、変数に束縛されてない宙ぶらりんな値がメモリから解放されるタイミングがいつなのかなーって気になった。
↓みたいなやつ。
fn f() {
vec![1, 2]; // こいつの解放タイミングが知りたい
()
}
解放時はdropが走るので、適当な構造体にdrop生やして試してみた。
struct Foo(&'static str);
impl Drop for Foo {
fn drop(&mut self) {
println!("dropped ({})", self.0);
}
}
fn f() {
println!("start");
Foo("宙ぶらりん");
println!("middle");
let foo = Foo("変数束縛");
println!("end");
}
実行結果はこうなりました。
start
dropped (宙ぶらりん)
middle
end
dropped (変数束縛)
宙ぶらりんな値の場合、生成はされるものの次の行では既に破棄されているらしい。
効率的ですね。
疑問が解けてスッキリしました。