Я всегда сопряжение инициализации динамического массива с финализацией в видеРучно вызывает SetLength (массив, 0); имеет недостаток?
finally
SetLength(Array, 0);
end;
Он чувствует себя более естественно, чтобы точно знать, когда массив получает «уничтожен» и позволяет мне более плавный переход от массивов в TList, если это необходимо уже имея «наконец».
Однако этот подход делает исходный код более отступом. Есть ли недостаток в этом подходе - читаемость, ремонтопригодность, расширяемость, производительность, ошибка при запуске?
Пример кода я пишу:
var
A1: array of Integer;
A2: array on Boolean;
A3: array of string;
begin
SetLength(A1, 10);
try
...
SetLength(A2, 20);
try
...
SetLength(A3, 30);
try
...
finally
SetLength(A3, 0);
end;
finally
SetLength(A2, 0);
end;
finnally
SetLength(A1, 0);
end;
end;
Ни один из этих вызовов в 'SetLength' не требуется, поскольку переменные выходят из области действия в конце' end; 'и автоматически освобождаются. Если переменные были более широкими по охвату (единичные или глобальные), это может иметь значение. Вы также можете удалить все блоки 'try..finally', если это все, для чего они предназначены, что делает весь вопрос об отступлении спорным. –
Сумма отступлений полностью зависит от вас. Если вы хотите, у вас может быть одна процедура с 100 строками кода или 100 процедур с 1 строкой кода. Отступ кода не обязательно влияет на производительность. Однако в этом случае вы можете инициализировать/uninitialize эти массивы вместе и иметь только один блок 'try..finally', хотя и не рекомендуется. –
@Jerry: Абсолютно ни один из этих вызовов в SetLength или try..finally не нужны. –