当前位置:首页 > 网络编程 > 软件语言 > DELPHI > Delphi中对象解除技巧

Delphi中对象解除技巧

点击次数:51 次 发布日期:2008-11-09 08:37:39 作者:源代码网
源代码网推荐
广告载入中
在Delphi程序设计中,我们需要通过解除建立的所有对象来避免内存泄
源代码网推荐 漏。但是,如果你在程序中不谨慎小心的话,很容易多次解除同一个对象,
源代码网推荐 这将会引起很严重的错误,造成应用程序崩溃,甚至是死机。
源代码网推荐   请看下面的程序:
源代码网推荐   procedure TForm1.Button1Click(Sender:TObject);
源代码网推荐   var
源代码网推荐    Button2,Button3:TButton;
源代码网推荐   begin
源代码网推荐    Button2:=TButton.Create(self);
源代码网推荐    Button3:=TButton.Create(Button2);
源代码网推荐    Button2.Free;
源代码网推荐    Button3.Free;
源代码网推荐   end;
源代码网推荐   在上例中,当执行到Button3.Free时会产生一个错误,因为在调用
源代码网推荐 Button2.Free时,Button2被解除,但因为Button2是Button3的宿主,Button3
源代码网推荐 也同时被解除,因此错误就不可避免地发生了。
源代码网推荐   要避免上述错误,有两种方法:第一,在解除宿主之前要先解除其所属的
源代码网推荐 所有组件。这种方法很简单,只要将上例中Button2.Free和Button3.Free换位
源代码网推荐 即可。第二,在Button3.Free执行之前将Button3变量设置为nil。程序如下:
源代码网推荐   Button2.Free;
源代码网推荐   Button3:=nil;
源代码网推荐   Button3.Free;
源代码网推荐   在上面的程序中,将Button3置为nil是为了阻止应用程序重新使用已解除

源代码网推荐 对象的内存。在调用Free对象方法时,它会确定对象是否为nil,如果不是,
源代码网推荐 Free对象方法会假定对象仍然存在,使用对象引用为它分配内存,然后调用
源代码网推荐 Destroy释放对象内存,并清除任何相关的虚拟对象方法的数据表格信息。而
源代码网推荐 Destroy对于有对象存在的内存地址不会做任何改变,所以如果在调用Destroy
源代码网推荐 之后测试该内存地址,它仍可能有效。所以当在程序中两次调用一个对象而没
源代码网推荐 有将对象引用置为nil时,对象引用将仍然引用对象解除之前所占用的内存地
源代码网推荐 址,这就是产生错误的原因。
源代码网推荐   当然,在实际开发过程中,大多数错误不会这样明显,解决的方法也要
源代码网推荐 依具体而定,不会这么简单地加一句话就能解决问题。我在这里只是说明一
源代码网推荐 种编程思想,起一个抛砖引玉的作用,具体的东西还要靠你在实践中去探索,
源代码网推荐 积累。


源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华