procedure TForm1.Button3Click(Sender: TObject);
begin
With TList.Create do
begin
//何かする
{
このところしかFree出来ないの,
}
end;
//ここでFreeしたいがやり方がわからないです、どなたか教えてください!。
end;
Halbow です。
With TList.Create do は、TList のコンストラクタが返すオブジェクト
を with で参照しているので、このままでは with の外で Free できません。
procedure TForm1.Button3Click(Sender: TObject);
var
List:TList;
begin
List := TList.Create;
With List do
begin
//何かする
end;
List.Free;
end;
とするといいです。個人的には、元質問のようなインスタンスを明確にしない
with の使用はしないようにしています。
> 個人的には、元質問のようなインスタンスを明確にしない
with の使用はしないようにしています。
というのはわかっているんですけど、ついついやっちゃうんですよね、簡単なので…^^;
ええと、こういう風にやります。
Delphiですから、BCBに翻訳してください。あまり変わらないと思います。
With TList.Create do begin try
//何かする
finally Free; end;
end;
です。ここで、try..finallyは、オブジェクト生成の決まり文句なので(必ず破棄できるようにするため)、こうしておきましょう。
with内のFreeは、TFormにもあるメソッドなので、使用をためらうでしょうけど、
この場合、まずwith文の中から(もっと言うと、with文内のdoに近いほうから)参照されるので、
問題はありません。
たとえば以下のような構文もOKです。
with FileList.Items, TList.Create do begin try... // FileListは、事前に宣言したTListBoxとします。
最後にFreeした場合は、TListのFreeが呼ばれますし、
Deleteメソッドを使っても、TListのが呼ばれます。
でも、こうすると、
procedure ABC(List: TList)みたいな関数に渡すことはできません。
ああ、よくみたらDelphiですね^^;
{}があるのでBCBだと思ってしまいました。
よく著名なフリーソフトの作家がよくこのような方法でソフトを書かれるので、
Withの外でfree;出来る方法があるかと思い質問させていただきました、
大変よくわかりました、ありがとうございます。
ツイート | ![]() |