喫茶XRAYトップページ

[スレッド全体
]

[6992] Re:仮想リストビューでメモリーリークの原因が不明返信 削除
2013/7/12 (金) 16:46:08 福士
マスターの家出先で聞いたほうがいいような気もしますが。

Button2ClickでDataList.Delete(i)を呼んでいますが、これだけでは
DataList.Items[i]のポインタが削除されるだけでインスタンスが
orphanになってしまいます。

procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
  ListItem: TplDataListItem;
begin
  for i := DataList.Count - 1 downto 0 do begin
    if DataList[i].Checked then
    begin
      ListItem := DataList.Items[i];
      DataList.Delete(i);
      ListItem.Free;  // TplDataListItemのインスタンスを解放
    end;
  end;
  ListView1.Items.Count := DataList.Count;
  //ListViewの表示更新(OnDataまたはOnDataHintイベントが発生する)
  ListView1.Refresh;
end;

のようにするか、TplDataListの継承元をTObjectListにして、
コンストラクタのパラメータをTrueにするといいと思います。

# コードが動くかどうか試していないのではずしていたらすいません。


[6993] Re2:仮想リストビューでメモリーリークの原因が不明返信 削除
2013/7/12 (金) 23:40:03 宮 〔HomePage
▼ 福士さん
> マスターの家出先で聞いたほうがいいような気もしますが。
>
>       ListItem.Free;  // TplDataListItemのインスタンスを解放
>
> # コードが動くかどうか試していないのではずしていたらすいません。


福士さん、早速教えていただきありがとうございます。
ばっちりです。
メモリーリーク発生していません。
>
> のようにするか、TplDataListの継承元をTObjectListにして、
> コンストラクタのパラメータをTrueにするといいと思います。


すごいですね、理論的なことはさっぱりわかりませんが・・


何か応用してできそうな気がしてきました。
ありがとうございました。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82