假设一个具有一些表单的应用程序在开始时只创建了一个数据模块。在这种情况DM1.OnCreate
下,将TStringList
创建 a 以在运行时使用。我们知道,当应用程序被终止时,所有东西都会被销毁,内存会自动释放。释放某些东西可能需要一些时间,因此并不总是建议担心关机时的内存泄漏。例如,参见Barry Kelly的这个答案或 Raymond Chen的这篇文章。
除此之外,如果我不添加TStringList.Free
到DM1.OnDestroy
. 在搜索我真正应该担心的任何其他内存泄漏时,这成为一个问题。
所以基本上我在问我是否/为什么/何时应该释放将由应用程序或操作系统(在这种特定情况下为 Windows)释放的对象实例。在寻找内存泄漏时是否还有其他有效案例?
注意:在这种特定情况下,不会多次创建或重新创建数据模块。除了一个之外,根本不会有任何内存泄漏。数据模块报废来源:
unit UDM1;
interface
uses SysUtils, Classes, ...;
type
TDM1 = class(TDataModule)
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
procedure DoStuffWithStringList1(Sender: TObject);
private
internalStL: TStringList;
end;
var
DM1: TDM1;
implementation
procedure TDMInterfacePAFECF.DataModuleCreate(Sender: TObject);
begin
internalStL := TStringList.Create();
end;
procedure TDMInterfacePAFECF.DataModuleDestroy(Sender: TObject);
begin
internalStL.Free; //<-- IS THIS NECESSARY OR ADVISED?
end;
procedure DoStuffWithStringList(Sender: TObject);
begin
//Place some code using internalStL here...
end;