释放问题!

256m 2002-12-14 05:16:08
FActiveGrid := TDBGrid.Create(nil);
.
.
.
FActiveGrid := MainGrid;
.
.
.
窗口最后关闭的时候,一般要把自己加的控件释放到,如果
FActiveGrid.Free
FActiveGrid := nil;
这个时候释放的是哪个?
是不是要在改变FActiveGrid之前先将其地址保存下来?
...全文
42 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
256m 2002-12-23
  • 打赏
  • 举报
回复
最近太忙不好意思,没有回帖。
  以前在我在窗口上放一个ActiveGrid,用于引用各个当前Grid,每次Form的Create事件里:ActiveGrid := TDBGrid.create(nil),每当一个真正的Grid,得到焦点后,我就:ActiveGrid := TDBGrid(Sender) 。窗口关闭的时候再Free。
  后来我觉得,窗口Create的时候,没有必要ActiveGrid := TDBGrid.create(nil),但是书是不是又说,没有创建就不能用!?最后我大着胆子删掉ActiveGrid := TDBGrid.create(nil),居然没有出错?!嘿嘿。
  不是各位有什么感想?
hansion3406 2002-12-16
  • 打赏
  • 举报
回复
第一个FREE时又经释放了..第二个NIL是用来把那个对像的被调用计数器设为NIL而已...这样是怕会产生引用错误的一种较安全的做法..
如果你怕没有释放的话..呵呵..恶一点..再来一个
freeandnil(yourobject);
就可以了..
dongliu 2002-12-16
  • 打赏
  • 举报
回复
搂主:我认为释放的是第二个,第一个并没有释放,仍然存在。不出错的原因是窗体在关闭的时候自己会自动释放所有空间
siyu2002 2002-12-16
  • 打赏
  • 举报
回复
wjlsmail(计算机质子)说的没错,楼主放心吧,FActiveGrid.Free,XXGrid当然不能访问了
wjlsmail 2002-12-15
  • 打赏
  • 举报
回复

FActiveGrid 和 XXGrid 可以看作指向同一内存块的两个指针
FActiveGrid.Free 可以看作释放的是这个指针

请指正
256m 2002-12-15
  • 打赏
  • 举报
回复
我觉得不太对,可以这样试一下,如果窗口没有关闭,直接在某个过程中:
FActiveGrid := XXGrid,然后,FActiveGrid.Free,应该调用的是XXGrid的Free方法把XXGrid,Free了,这个时候再试问XXGrid会出错,也就是说原来的FActiveGrid并没有被Free.
.
..
...
cookieyfeng 2002-12-14
  • 打赏
  • 举报
回复
我觉得释放一次旧可以了,因为虽然第一次指针给了FActiveGrid,但第二次指针的连接变了,所以把这个指针释放了旧可以了!
wjlsmail 2002-12-14
  • 打赏
  • 举报
回复
同意楼上,相当于指针。 我想这和编译中对变量内存的分配有关
siyu2002 2002-12-14
  • 打赏
  • 举报
回复
FActiveGrid.Free就行了
我认为在delphi里FActiveGrid 就是个指针
我是这样理解的,这和C++不太一样,希望和大家讨论一下
256m 2002-12-14
  • 打赏
  • 举报
回复
补充:我在代码是一直没有保存,就直接Free,也不知道真正Free了没有,虽然没有出现什么异常,但是心里老是不踏实!


帮帮我吧,谢谢!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧