您可以使用 2、3、4 等参数创建一系列重载版本。例如:
procedure CreateStringLists(var L1, L2: TStringList); overload;
procedure CreateStringLists(var L1, L2, L3: TStringList); overload;
procedure CreateStringLists(var L1, L2, L3, L4: TStringList); overload;
procedure CreateStringLists(var L1, L2: TStringList);
begin
L1 := nil;
L2 := nil;
Try
L1 := TStringList.Create;
L2 := TStringList.Create;
Except
FreeAndNil(L2);
FreeAndNil(L1);
raise;
End;
end;
// etc.
如果我这样做,我会编写一个脚本来生成代码。
顺便说一句,在我自己的代码中,我会InitialiseNil(L1, L2)
在该函数的开头和FreeAndNil(L2, L1)
异常处理程序中编写。InitialiseNil
并且FreeAndNil
是由非常简单的 Python 脚本生成的函数,该脚本作为注释包含在代码库中,以便可以重新运行。像上面定义的例程CreareStringLists
只有在你有一个匹配的例程来一次性释放它们时才有用。这允许您编写:
CreateStringLists(L1, L2);
Try
// do stuff with L1, L2
Finally
FreeAndNil(L2, L1);
End;
最后,我并不是说我一定会这样做,但这是对这个问题的天真而直接的回答。正如@TED 所说,这样做的需要表明代码库中存在更深层次的问题。