-1

私はC++が初めてで、次の問題について少し混乱しています:

DTOR が例外をスローするとどうなりますか? オブジェクトはまだ破棄されていますか?

前もって感謝します。

4

2 に答える 2

1

そして一般的に:それは悪い考えですか?

はい、非常に悪いものです。

デストラクタから例外をスローしないでください。別の例外がスローされた後、その例外がcatchハンドラーによってキャッチされる前に例外がスローされた場合、プログラムは強制的に強制終了されます。

デストラクタは、例外がスローされたときにスタックの巻き戻し中に呼び出されるため、それらのいずれかが別の例外をスローすると、プログラムはすぐに終了します。よくない。

デストラクタから例外をスローしないようにします (またはtry/ブロックにラップして、デストラクタの外に伝播catchしないようにします)。そうすることは、悪いプログラミング方法です。

C++11標準のパラグラフ15.2/3から:

try ブロックから例外がスローされるポイントまでのパス上に構築された自動オブジェクトのデストラクタを呼び出すプロセスは、「スタックの巻き戻し」と呼ばれます。スタックの巻き戻し中に呼び出されたデストラクタが例外で終了した場合、std::terminate が呼び出されます (15.5.1)。[ 注:したがって、デストラクタは通常、例外をキャッチし、デストラクタの外に伝播させないようにする必要があります。—終わりのメモ]

于 2013-03-08T12:03:36.137 に答える
0

はい、それは悪い考えです。安全に投げられるかどうかを判断する合理的な方法はありません。

于 2013-03-08T12:03:21.683 に答える