考虑这个简短的Delphi程序: procedure TfrmXQuery.FieldListFillFromDefault;var field_list: TStringList;begin try if x '' then begin field_list := TStringList.Create; {do some stuff with field_list} end; finally if field_list NIL the
procedure TfrmXQuery.FieldListFillFromDefault; var field_list: TStringList; begin try if x <> '' then begin field_list := TStringList.Create; {do some stuff with field_list} end; finally if field_list <> NIL then begin field_list.Free; end; end; end;
当我在Delphi 3中运行它时,x =”以便永远不会创建field_list,
>为什么是field_list<>零?
>对象未初始化为NIL?
>如果它不是NIL是什么?
>如果它是未分配的而不是NIL我怎么知道是否要释放它? Assigned函数没有告诉我:如果Assigned(an_object)等于an_object = NIL
var somevar: sometype; begin // at this point, somevar is just a chunk of memory that // holds whatever happens to be in that chunk somevar := nil; // now somevar = a specific value you can test // other code end;
你不应该测试<> nil(正如其他人在评论中指出的那样)是否正确构造了代码.
procedure TfrmXQuery.FieldListFillFromDefault; var field_list : TStringList; begin if x <> '' then begin field_list := TStringList.Create; try {do some stuff with field_list} finally field_list.Free; end; end; end;
(如果你打开提示和警告,编译器会告诉你field_list可能没有被初始化,这可以帮助你自己解决这个问题.)