コンストラクタがスローする(スローされた例外がコンストラクタ自体にキャッチされない)場合、オブジェクトの構築は失敗します。
クラスにクラスメンバーがある場合、これらのクラスメンバーはコンストラクターが実行される前に完全に構築され、スローされた例外がスローされた例外が続行される前に破棄されます。
任意のスーパークラスのDitto。スローされた例外は、サブクラスの構築の開始前に構築されたスーパークラスを破棄し、その例外がスローされたコンストラクタに入る。
結論は、オブジェクトが細かく分解されていることです。つまり、オブジェクトがすでに構築されていても、オブジェクトは分解されます。
最後に、オブジェクトはおそらくどこにも存在できません。それが論理的に存在することはできません。
例外が検出されなかったため、例外が伝播され、オブジェクトが宣言されたスコープから終了する必要があります。
try
{
ManagedFile mf ( /* construct arguments */);
/* More code */
} catch (...)
{
/* More code */
}
これは、あなたはおそらく、例外をキャッチすることができ、最も早い場所です:あなたは、例外をキャッチした場合でも
。 ManagedFile
のコンストラクタでスローされた場合、実行はおそらくtry
ブロック内で継続できません。あなたは例外をキャッチしなければなりません、そして、これはあなたがそれを捕まえることができる最も早いものです。
このManagedFile
オブジェクトはtry
ブロック内にのみ存在します。 try
ブロックの外に存在しません。これにはcatch
ブロックが含まれます。そこにも存在しません。
したがって、このコンストラクタが例外をスローすると、オブジェクトが存在することは論理的に不可能になります。
P.S.オブジェクトがダイナミックスコープ(new
)で構築されていた場合、スローされた例外は、例外がラダーに伝播する前に、new
によって割り当てられたメモリの解放も処理します。
コンストラクタはどのように定義されていますか?いくつかのコードが必要です。 – DeiDei
コンストラクタがスローすると 'mf'をどのように使うつもりですか? –
また、基本コードの書式設定を習得しなくても、4年間でどのように5k担当者を得ましたか? :/ –