TApplication的Terminate方法,会不会释放所有窗体使用的资源?(50分)

  • 主题发起人 主题发起人 zhengxq
  • 开始时间 开始时间
Z

zhengxq

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序运行中,使用TApplication的Terminate方法(在Unit文件中),
会不会释放所有窗体使用的资源?
 
有可能不会,如bitmap,icon等,
另外如果你的程序中使用了dc而没有释放的话,可能也不会自动释放。
 
所有的手工创建的对象都不会自动释放(有 Parent 和 Owner)的除外。
 
由系统自动创建的对象当然会释放,自己定义的当然要自己去释放。
 
那么在程序运行中,使用TApplication的Terminate方法,
与在主Form中使用"Close"有何不同,是否可以代替?
 
Form.Close是关闭该表单,并在一定情况下释放內存。

如果该Form是Application.MainForm的话,会调用Application.Termimate。

下面是TCutsomForm.Close的源码:

procedure TCustomForm.Close;
var
CloseAction: TCloseAction;
begin
if fsModal in FFormState then
ModalResult := mrCancel
else
if CloseQuery then
begin
if FormStyle = fsMDIChild then
if biMinimize in BorderIcons then
CloseAction := caMinimize else
CloseAction := caNone
else
CloseAction := caHide;
DoClose(CloseAction);
if CloseAction <> caNone then
if Application.MainForm = Self then Application.Terminate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
else if CloseAction = caHide then Hide
else if CloseAction = caMinimize then WindowState := wsMinimized
else Release;
end;
end;
 
好像不会释放干净的,
 
凡是自己创建的,一定要自己释放(自己的事自己做嘛)
try
...create;
finally
...free;
end;
 
不好意思写错了
x.create
try
...
finally
x.free
end;
 
其实就算程序没有释放资源,系统也会释放它的,这是win32的好处。 :)
 
多人接受答案了。
 
后退
顶部