Вы можете создать серию перегруженных версий с параметрами 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, необходимость сделать это предполагает более глубокие проблемы в кодовой базе.