デストラクタが例外をスローしてはならないことはわかっています。
http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.13
私は次のコードを持っています:
~a()
{
cleanup();
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
私の静的ソースコード分析では、次のようにクリーンアップ関数を呼び出す必要があると不平を言っています。
~a()
{
try {
cleanup();
}
catch(...) {
// What to do? Print out some logging message?
}
}
// I do not expect exception being thrown in this function.
// If exception really happen, I know that it is something not recoverable.
void a::cleaup()
{
delete p;
}
関数を呼び出すたびに、デストラクタに try...catch ブロックを配置するのが良い方法かどうかはわかりません。として :
(1) クリーンアップ関数が例外をスローできる場合、何か問題が発生したことがわかります。私はそれがフェイルファストであることを好みます。つまり、システム全体をクラッシュさせ、プログラマーにデバッグさせます。
(2) try...catch ブロックの入出時にオーバーヘッドが発生する。
(3) クラスのデストラクタの周りに多くの try...catch ブロックがあり、コードが煩雑に見えます。
なぜ try...catch ブロックを配置する必要があるのでしょうか。
ありがとう。