横から失礼
こんな感じの特異なコードだと、解放対象とさせるためには破棄の段階でnullを入れる必要あり?
(hageをforの中で定義してしまえば1回目の処理後に解放対象とされるだろうけど)

Hoge hage; // hage定義
for(int n=0;n<10000;n++) {
 if(n==0) { /* hage初期化 */ }
 // 長い処理
 if(n==0) { /* hage使用 */ }
 // 長い処理
 if(n==0) { /* hage使用 */ }
 // 長い処理
 if(n==0) { /* hage破棄 */ }
 // 長い処理
}