デストラクタから例外を投げることは禁止されていないが、危険な状況に陥る可能性があるため避けるべきである。
デストラクタが例外を投げてしまうオブジェクトが複数あった場合、それらのオブジェクトを破棄した際に複数のアクティブな例外が発生する可能性がある。アクティブな例外が複数存在する場合の振る舞いは未定義であり避けるべきである。
回避策としては
- デストラクタ中でプログラムをabortさせる
- デストラクタで例外を握りつぶす
- クライアントにエラー処理の機会を与えるデストラクタではない通常の関数を用意する
がある。
参考文献
Effective C++ 第3版, スコット・メイヤーズ著