当前位置:主页>仓库管理软件> 列表

treeview的释放疑惑!! 找仓库进销存软件

记账软件版1楼: 创建时将一个窗体变量赋值给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 ;
我想问,这样能将窗体真正释放吗?会存在内存泄漏吗?请指教。

2楼: 这样能将窗体真正释放吗?---------- 没有。
会存在内存泄漏吗? ---------- 不会。 如仓库进销存软件

3楼: flamingo???怎会不存在那?因为我create了呀!!!!

4楼: 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);来创建,那就不会自动释放了。。。。

5楼: 从没考虑过这些问题,呵呵。

学习了下!

6楼: 可是我因为需要多次动态创建窗体,所以总是create的话会........
后来我自己使用treeview的delete事件了。

记账软件版7楼: treeview的data属性可以保存一块内存. 一般应该在删除节点时释放 Data中的内存, 所以,经常是在 treeview的.Deletion事件中书写释放.

这有详细的:
http://www.cnblogs.com/duhai_lee/archive/2005/07/20/127809.html#196519

8楼: 楼上。。。。给的那个页面里好象没提到data可以保存一块内存吧。。。也只是说保存了指针而已。。。

TO 6ysnow:
不用总creat啊。。。。你每次creat窗体的时候先判断一下不就行了
if not assigned(FFlowWin) then
FFlowWin:=TTFrmFlowShow.Create(self);

9楼: 我知道你 Create 了呀。如果你问我关机会不会再占用内存,我还真不好回答,问题是,你问我 system.Exit 会不会存在内存泄漏,程序都死翘翘了,还有什么内存泄漏?所以当然不会啦!

10楼: 多人接受答案了。