对象销毁时怎样完全释放?(100分)

  • 主题发起人 主题发起人 blackbeam
  • 开始时间 开始时间
B

blackbeam

Unregistered / Unconfirmed
GUEST, unregistred user!
我的对象代码如下:
MyObject = Class(TObject)
....

mobject:=MyObject.Create();
....
mobject.Destroy;//执行后mobject不为nil
怎样才能完全释放内存?构造函数和析构函数怎么写才最正确?
 
mobject.Free;
 
在destroy中你要释放在你控件中建立的其它控件,用somecomponent.free去释放。
当你的控件执行了destroy后控件已经释放了,资源也释放了,
虽然它不为NIL。
 
try
mobject:=MyObject.Create(nil);
.....
finally
mobject.free;
 

mobject.free
或 mobject:=nil;
 
用 freeandnil(mobject);
 
对象本身的话实际上很容易写
FreeAndNil(mobject) 或 mobject.free
mobject:=nil
但如果是这种的话却是另外一种情况
假设你有个窗口里按一个BUTTON打开另外一个窗口Form2(TForm2)
如果你不希望重复打开Form2,你一般都会这么写
IF Assigned(Form2) then
application.create(Form2,TForm2);
Form2.show;
一般你都会希望Form2本身在关闭时自动完全注销
那么在Form2的onclose里写
Self.free;
Self:=nil;//这里就出问题了,而必须写Form2:=nil;
如果写SELF:=nil(FreeAndNil(Self)一样)的话,在你第一次关闭FORM2后
再调用FORM1里的BUTTON事件时,你会发现它仍然认为Form2不是NIL(虽然其资源已释放)
由此可见使用NIL对实例本身无什么意义,只对当前实例的变量有意义!
//这是我测试的一些体会,也许有不对之处,只希望可以一起讨论

 
uses SysUtils;

FreeAndNil(MyObject);
 
free or release
 
多人接受答案了。
 
后退
顶部