関数内のオブジェクトの解放手法のまとめ
前提
- 関数内でのエラーはすぐにチェックしてreturn(goto)する。成功時のみのif文の書き方はしない
- ネストを浅くするため。欠点として、オブジェクトの解放場所を考慮する必要が出てくる。
- ケント・ベックの"実装パターン"の"ガード条件"で記述されている。
言語
C
- gotoで解放
- ポインタをNULLで初期化して、エラー時にはgotoでerr_exitに抜けて、err_exit:でNULLでない場合に解放する
- ANSI Cではfree()(deleteも同じ)はNULLの場合に何もしないので、err_exit:でのNULLチェックは不要。
- free()をwrapしてNULLが来たときにはエラーにするプロジェクトもあるが、意図の明確化(このコードでNULLがあり得ることの表明)の利点より、コードの複雑生の向上の欠点の方が大きい気がする。
- ANSI Cではfree()(deleteも同じ)はNULLの場合に何もしないので、err_exit:でのNULLチェックは不要。
- ポインタをNULLで初期化して、エラー時にはgotoでerr_exitに抜けて、err_exit:でNULLでない場合に解放する