Rust part10at TECHRust part10 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト704:デフォルトの名無しさん 21/05/21 13:37:02.96 J6y23PLS.net すまんrust新参者なんだが、Rust By Exampleのコードいじって勉強してて、以下のコードが疑問に感じられた。 以下のプログラムはmain関数内のif文は実行されないとは明らかなんやが、それでもsubの行でいわゆるuse-after-freeのコンパイルエラーが出る。 これはif文が実行されなくてもdropは実行されるということなんですか? 下のコードみたいにuse-after-freeになるかならないかがif文の条件満たすかどうかによって決まるようなプログラムでも rustでは一緒くたにuse-after-freeになるとみなされるってことなんですね? そう考えればそこまで賢くないコンパイラですね struct Droppable { id: &'static i8, } impl Drop for Droppable { fn drop(&mut self) { println!("> Dropping {}", self.id); } } fn sub(d: &Droppable) { if *d.id == 0 { drop(d); println!("> Test {}", d.id); } } fn main() { let _a = Droppable { id: &0 }; if *_a.id == 1 { drop(_a); } sub(&_a); } 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch