【发布时间】:2019-09-22 13:20:13
【问题描述】:
我想知道在释放不属于表单的对象时什么是最佳做法,什么不应该、应该或必须做。 我是否应该覆盖表单的析构函数并释放其中的对象 或者 我应该使用 FormClose 事件并释放其中的对象吗
感谢任何 cmets,也许还有第三种更好的方法,我不知道。
已经在 Google 上看过了,但是要么没有相关的 cmets,要么我的搜索问题有误。
目前我有:
procedure TmyForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Registry.Free;
FileStream.Free;
MemStream.Free;
end;
这行得通,只是想知道这是否是正确的方法。
【问题讨论】:
-
默认
Action是caHide,所以不,这不是正确的做法。 -
释放 onClose 事件处理程序中的对象是正确的地方,如果表单只使用 ShowModal 显示。
-
@nolas - 不引起任何问题不会使它正确。您不想跟踪不必要的细节,我会不会显示此表单非模态等。从语义上讲,正确的做法是释放与您创建它的位置匹配的对象。只有在 OnOpen 中创建对象时,OnClose 才是正确的,这是不可能的。
-
@nolaspeaker:即使是使用
ShowModal模态显示的表单也可以在其生命周期内多次显示和关闭,因此通常OnClose在那里也很危险。但我知道你在谈论标准的成语with TMyForm.Create do try ShowModal finally Free; end,在这种情况下OnCloselikely 只被调用一次。尽管如此,“可能”还不够好,你永远不知道未来的程序员是否会以不同的方式使用这种形式。所以@Sertac 对他的评论很满意。OnDestroy是正确的地方,即使在OnClose可能工作的情况下。
标签: delphi