こんにちは
Delphiを勉強中のものなのですが、
Form上にリストボックスが合って
関数で取得した値を表示するプログラムを作成しました
そこで質問なんですが、以下のGListっていつ開放してあげれば
良いかいまいち分かりません。
どなたか教えていただけませんか?
----------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.ListBox1.items.Assign (GetList);
end;
Function TForm1.GetList:Tstringlist;
var
GList:TStringList;
i:integer;
begin
GList:=TStringList.Create ;
for i:=0 to 10 do
begin
GList.Add(Inttostr(i));
end;
Result:=GList;
//GList.free;
end;
クラスを戻り値にしているので呼出側で解放する必要があります。
procedure TForm1.Button1Click(Sender: TObject);
var
SL: TStringList;
begin
SL:= GetList;
try
Form1.ListBox1.items.Assign(SL);
finally
SL.Free;
end;
end;
Basser さん
レスありがとうございます。
GListをグローバルとかにすればよいのかなぁ
など考えていたんですが、
この方法できっちり開放します。
ありがとうございました
> GListっていつ開放してあげれば
セットした直後に開放します。
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl := GetList;
Form1.ListBox1.items.Assign (sl);
sl.Free;
end;
でも、クラスのインスタンスを返す関数はあまりよい設計とはいえません。
わたしなら
procedure TForm1.Button1Click(Sender: TObject);
var
sl: TStringList;
begin
sl := TStringList.Create;
InitList(sl);
Form1.ListBox1.items.Assign (sl);
sl.Free;
end;
procedure TForm1.InitList(sl: TStringlist);
var
i:integer;
begin
sl.Clear;
for i:=0 to 10 do sl.Add(Inttostr(i));
end;
というふうにします。
GetListは、新しいインスタンスを返すため、結果を受け取る側で開放すべき。
GetListをそのまま利用したいのであれば、Button1Click内に、TStringList型の変数を用意して、まずその変数にGetListの結果を代入。
Assign後、破棄。
GetListの引数としてTStringListを受け取り、それにAddするほうが、開放のタイミングが難しくならないでしょう。
Button1Click内でStringListをCreateしておく。
それより、ListBox1.itemsをそのまま引数として渡す方が、なおよし。
ありゃ、みんな回答早い。
ツイート | ![]() |