当您在堆栈上分配对象引用时,它会填充随机值(即堆栈上的先前值 - 在某些边界情况下可能为零)。这是设计使然。
为了检查变量是否已初始化,您必须首先手动将其设置为nil
. 这是一个非常快速的任务。
典型的代码模式可能是:
procedure TForm1.Button1Click(Sender: TObject);
var
sVariable : TStringList;
begin
sVariable := nil; // initialize explicitely
try
(...) // in this hidden part sVariable may be instantiated
if not Assigned(sVariable) then // instantiate if not already done
sVariable:= TStringList.Create;
(...)
finally
sVariable.Free; // will do nothing if sVariable=nil
end;
end;
请注意,在上面的代码中,我包含了一个(强制性恕我直言)try...finally
块来释放内存。如果sVariable
没有分配,它仍然是nil
,在这种情况下sVariable.Free
什么也不做。这是 Delphi 中常用的最佳实践模式。