Borland Developer Studio 2006 No.10
■ このスレッドは過去ログ倉庫に格納されています
0209177
2006/11/14(火) 21:23:55のアプリケーションが使用したり関係したりする色々なリソースの例です。
"try...finally"ブロックの核心は、アプリケーションの取る実行経路に関わら
ず確保したリソースを適切に返却することを保証することにあります。
それでは"try...finally"ブロックの一般的な誤用をいくつか見て、綿密に調べ
てみましょう。
var
Obj: TMyClass;
begin
try
Obj := TMyClass.Create;
...
finally
Obj.Free;
end;
end;
ここには微妙な問題があります。最初に正常な実行フローを追ってみましょう。
制御がtryブロックに入り、TMyClassのインスタンスがアロケートされてコンス
トラクタが呼び出されます。制御が戻り、ローカル変数Objに格納されます。い
くつかの処理がObjに対して行われ("..."の部分)、制御がfinallyブロックに
入ってObjのインスタンスが解放されます。ここまでは大丈夫でした。いいです
ね?つまり、メモリが確保され解放され、TMyClassのインスタンスが必要とし
ているその他のリソースとともにヒープもうまく処理されています(適切に設計
されたクラスなら、です)。
さて、制御のフローのその他の可能性を見てみましょう。制御がtryブロックに
入り、TMyClassのインスタンスがアロケートされてコンストラクタが呼び出さ
■ このスレッドは過去ログ倉庫に格納されています