5

Delphi の 2 つのコーディング パターンに実際的な違いはありますか。

バージョン 1

try
  try
    {Do something}
  finally
    {Do tidy up}
  end
except
  {Handle exception}
end;

バージョン 2

try
  try
    {Do something}
  except
    {Handle exception}
  end
finally
  {Do tidy up}
end;
4

2 に答える 2

6

2つの違いがあります。

  1. 例外ブロックと最終ブロックが実行される相対的な順序は異なります。バージョン1では、finallyはexceptの前に実行されます。バージョン2では、実行順序が逆になっています。
  2. バージョン1では、finallyブロックが発生した場合、それはexceptブロックによって処理されます。バージョン2では、finallyブロックが発生した場合、次の含まれる例外ハンドラーによって、つまりこのコードの外部で処理されます。

通常、あなたは最終的に発生するブロックについて心配していません。あなたは単にそれが起こることを期待していません、そしてもしそうなら、何かがおそらく非常に壊れています。

したがって、重要な違いは、finallyが例外ハンドラの前に実行されるか、またはその逆であるかです。時々それは問題ではありませんが、それはしばしば違いを生みます。

于 2012-09-16T09:03:57.153 に答える
2

try..except以下の行を使用すると実行されます。

Resource := TAbstractResource.Create;
try
  Resource.DoSomeThing;
except
  On E:Exception Do 
   HandleException(E);
end;
FreeAndNil(Resource);
于 2012-09-16T09:13:53.070 に答える