Delphi中对象解除技巧

蓝颜宅之恋

蓝颜宅之恋

2016-02-19 20:46

下面是个简单易学的Delphi中对象解除技巧教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

  我的主页: http://www.tommstudio.com/

  在Delphi程序设计中,我们需要通过解除建立的所有对象来避免内存泄漏。但是,如果你在程序中不谨慎小心的话,很容易多次解除同一个对象,这将会引起很严重的错误,造成应用程序崩溃,甚至是死机。
  

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  请看下面的程序:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)


  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时,对象引用将仍然引用对象解除之前所占用的内存地址,这就是产生错误的原因。
  当然,在实际开发过程中,大多数错误不会这样明显,解决的方法也要依具体而定,不会这么简单地加一句话就能解决问题。我在这里只是说明一种编程思想,起一个抛砖引玉的作用,具体的东西还要靠你在实践中去探索,积累。
展开更多 50%)
分享

猜你喜欢

Delphi中对象解除技巧

编程语言 网络编程
Delphi中对象解除技巧

在AutoCAD2004中解除对象编组

autocad教程
在AutoCAD2004中解除对象编组

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在AutoCAD2004中解除对象编组的方法

cad教程 autocad教程 CAD
在AutoCAD2004中解除对象编组的方法

Delphi中避免使用ClassName判断对象的类型

编程语言 网络编程
Delphi中避免使用ClassName判断对象的类型

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Delphi中的Access技巧集

电脑网络
Delphi中的Access技巧集

Delphi中OnDrawCell的使用技巧

编程语言 网络编程
Delphi中OnDrawCell的使用技巧

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

win7瘦瘦身大集合

win7瘦瘦身大集合

步步精细教你AS/400 DB2数据导入Access

步步精细教你AS/400 DB2数据导入Access
下拉加载更多内容 ↓