解放されたか知るには

解決


Delphi初心者  2004-12-08 11:04:19  No: 12183  IP: [192.*.*.*]

PrivateでTStringListの配列を組んでいて、プログラム中から、配列の中のどれかのStringListを解放しています。
最終的にはOnDestroyで全て解放するのですが、このとき、すでに解放してあるものはFreeを呼び出さない。
つまり、解放されているものが識別できればいいのですが、解放されているか識別する方法ってありますか?
よろしくお願いします。

編集    削除
りおりお  2004-12-08 12:50:04  No: 12184  IP: [192.*.*.*]

nil を代入していないかぎり識別する方法はありません。

編集    削除
にしの  2004-12-08 18:32:41  No: 12185  IP: [192.*.*.*]

StringList.Free;
と書かずに、
FreeAndNil(StringList);
とすると簡単に書けますよ。
解放してある場合の処理は、
if not Assigned(StringList) then
begin
  { 解放してある場合の処理 }
end;
と書きます。

編集    削除
りおりお  2004-12-08 19:36:37  No: 12186  IP: [192.*.*.*]

配列じゃなくて TObjectList で保持すると、その辺は自動的にできますよ。
TObjectList.OwnsObjects をヘルプで見てください。

編集    削除
Delphi初心者  2004-12-09 08:37:39  No: 12187  IP: [192.*.*.*]

りおりお さん、にしの さん、どうもありがとうございます。

FreeAndNilなんていうのがあるなんて初めて知りました。nilが代入されるのなら識別もどうにかなります。
TObjectListというのも初めて聞きました(汗)。ちょびちょびとHelpを引きつつ使ってみようと思います。

どうもありがとうございました。

編集    削除