谁给讲讲 Form.Free 后为何要手工设为 nil(50分)

  • 主题发起人 主题发起人 savetime
  • 开始时间 开始时间
S

savetime

Unregistered / Unconfirmed
GUEST, unregistred user!
Destory时 不能设置 Self := nil 吗?
不自动设为 nil 是什么原因?我是问 Borland 为何要这样设计。
 
没用,除非给你下次调用的时候判断是否已经存在的时候提供一个依据。
if form2=nil then
Form2:=TForm2.Create....
如果是以上代码,则需要在form2退出的时候使用form2:=nil
 
Form2.Destory
Destory 为何不将 Form2 自动设置为 nil

TForm 类不能执行以下语句吗?
procedure TForm.Destory(Self: TObject);
begin
...
Self := nil;
end;
 
靠form2.free自动设为nil是不可能的,因为这时fom2不知道哪里还引用了这个指针。
如果在程序中认为有必要将form2设为nil,可以使用
form2.free;
form2:=nil;

另外delphi5已经为我们提供了一个FreeAndNil的函数,可以直接这样用
FreeAndNil(Form2);
 
看看Tform.Free原程序就清楚了。

procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
 
>>靠form2.free自动设为nil是不可能的,因为这时fom2不知道哪里还引用了这个指针。
你的意思是Form2的实例并不知道Form2这个变量是否引用自己?
好像有道理
 
用这个,
freeandnil();
 
接受答案了.
 

Similar threads

D
回复
0
查看
744
DelphiTeacher的专栏
D
D
回复
0
查看
748
DelphiTeacher的专栏
D
D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
D
回复
0
查看
763
DelphiTeacher的专栏
D
后退
顶部