解放されたか知るには

解決


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

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

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

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

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

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

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

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

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

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

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

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

編集 削除