Вы освобождаете объекты так же, как вы их распределили. Если вы присвоили значение элемента, вызвав конструктор класса, то освободите объект, на который ссылается этот элемент.
destructor TMyInfo.Destroy;
var
info: TMySubInfo;
begin
for info in SubInfo do
info.Free;
inherited;
end;
Использует синтаксис, введенный в Delphi 2005. Если у вас более старая версия, используйте явную переменную контроля цикла:
var
i: Integer;
begin
for i := 0 to High(SubInfo) do
SubInfo[i].Free;
Вам не нужно звонить SetLength
в конце. Поле динамического массива, такое как SubInfo
, освобождается автоматически при уничтожении объекта. Он работает так же, как интерфейс, строка и поля Variant.