掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
例外の扱い方(必須処理の書き方について) (ID:19023)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
あむと言います。 例外処理における、try...except, try...finally の使い方についてですが、Delphi では、 (1) try...except : 例外は except 節で処理され、その後は例外は解除される。 (2) try...finally : 例外の有無にかかわらず finally が実行され、例外は解除されない。 と理解しています。 そこで質問が二つ。。 ■ 一つ目 http://www.borland.co.jp/tips/cbuilder/cb001/delbcb_7.html のような、よくあるサンプルでは、 try try ..... except .....(例外処理) end; finally .....(必須の後処理) end; のように書かれていますが、この except と finally のネストは逆なのでは? (例外発生時は、内側の except で例外が解除されるため、外側の try...finally は try ブロックの意味をなしていないのでは? また、例外が発生しなかった場合も、try ブロックの意味をなしていない。という理由。) ■ 二つ目 上記 (1) の理由から、except 処理した後はそのまま処理が継続されるので、わざわざ try を2重にしなくても、 try ..... except .....(例外処理) end; .....(必須の後処理)← finally に書かれるであろう処理 これだけで十分なのではないか? たとえば、 mst := TMemoryStream.Create; try ........ except ........ end; mst.Free; という具合です。 言葉にするなら、 「事後処理は、finally に書くのと、try...except ブロックの外に(普通に)書くことは等価である」 ということなのかなと思うのですが、どう思われますか? ずいぶんと長い間探しているのですが、こういうコードは見かけないため質問させていただきました。 ※ もちろん、内側が try...except on ... で、例外を特定している場合は別です。 以上、稚拙な質問で恐縮ですが、ご教授頂けると幸いです。 よろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.