treeview的释放疑惑!!(10分)

  • 主题发起人 主题发起人 6ysnow
  • 开始时间 开始时间
6

6ysnow

Unregistered / Unconfirmed
GUEST, unregistred user!
创建时将一个窗体变量赋值给data。
FFlowWin:=TTFrmFlowShow.Create(self);
FFlowWin.Name:='Frm'+intTostr(GetTickCount);
FFlowWin.Caption:=Mname;
DirNode.Data:= FFlowWin;
当我想释放窗体时
if DirNode.Data= nil then system.Exit ;
DirNode.Data:=nil ;
我想问,这样能将窗体真正释放吗?会存在内存泄漏吗?请指教。
 
这样能将窗体真正释放吗?---------- 没有。
会存在内存泄漏吗? ---------- 不会。
 
flamingo???怎会不存在那?因为我create了呀!!!!
 
data只是一个指针,DirNode.Data:= FFlowWin这里data记录的是FFlowWin内存块的首地址

当你DirNode.Data= nil的时候只是把这个指针清空了,指针指向的内存里面的东西并没有被释放仍然存在他creat时申请的内存中,你使用FFlowWin仍然可以访问

在你creat FFlowWin的时候:FFlowWin:=TTFrmFlowShow.Create(self);
这时FFlowWin的owner是self,也就是当前窗体,所以在当前窗体释放的时候也会将FFlowWin一起释放,所以不会造成内存泄露
如果你用FFlowWin:=TTFrmFlowShow.Create(nil);来创建,那就不会自动释放了。。。。
 
从没考虑过这些问题,呵呵。

学习了下!
 
可是我因为需要多次动态创建窗体,所以总是create的话会........
后来我自己使用treeview的delete事件了。
 
treeview的data属性可以保存一块内存. 一般应该在删除节点时释放 Data中的内存, 所以,经常是在 treeview的.Deletion事件中书写释放.

这有详细的:
http://www.cnblogs.com/duhai_lee/archive/2005/07/20/127809.html#196519
 
楼上。。。。给的那个页面里好象没提到data可以保存一块内存吧。。。也只是说保存了指针而已。。。

TO 6ysnow:
不用总creat啊。。。。你每次creat窗体的时候先判断一下不就行了
if not assigned(FFlowWin) then
FFlowWin:=TTFrmFlowShow.Create(self);
 
我知道你 Create 了呀。如果你问我关机会不会再占用内存,我还真不好回答,问题是,你问我 system.Exit 会不会存在内存泄漏,程序都死翘翘了,还有什么内存泄漏?所以当然不会啦!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
532
import
I
后退
顶部