Finally
try と catch 句に加えて、CLR の例外処理は finally 句をサポートします。 セマンティクスは構造化例外処理 (SEH) の __finally ブロックと同じです。 __finally ブロックは try または catch ブロックに進むことができます。
解説
finally ブロックの目的は、発生した例外の後に残っているリソースをクリーンアップすることです。 例外がスローされなくてが finally ブロックが必ず実行されることに注意してください。 catch ブロックはマネージ例外が try 関連のブロック内でスローされれば場合にのみ実行されます。
finally は状況依存のキーワードです。詳細については、「状況依存のキーワード (C++ コンポーネント拡張)」を参照してください。
使用例
次の例では finally の単純なブロックを示します。:
// keyword__finally.cpp
// compile with: /clr
using namespace System;
ref class MyException: public System::Exception{};
void ThrowMyException() {
throw gcnew MyException;
}
int main() {
try {
ThrowMyException();
}
catch ( MyException^ e ) {
Console::WriteLine( "in catch" );
Console::WriteLine( e->GetType() );
}
finally {
Console::WriteLine( "in finally" );
}
}