ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

デストラクタでは例外を投げない

Effective C++ 第2章8項
デストラクタで例外を投げることはできるが、するべきではない。
たとえばデストラクタで例外を投げるクラスがあり、そのクラスのオブジェクトを配列で複数個作成した場合。その配列がいらなくなったときオブジェクトのデストラクタが呼ばれ、そのとき例外が発生したとする。配列でオブジェクトは複数個あり、再び例外が起きてしまう場合がある。アクティブな例外が複数あるときの動作は定義されていないので何が起きるか分からない。
どうしてもデストラクタで例外を書く必要がある場合は、例外が起きたときにプログラムをASSERTで止めるか、ログに出力して例外が起きたことをわかるようにすべき。
そもそも例外はあってはならない場合を処理するためのものであり、例外が起きることを前提としたコードは書くべきではない。