Подтвердить что ты не робот

Как освободить общий TList <T>?

Освобождает ли общие списки, такие как TList<string>, TList<Double>, TList<Integer> или TList<TMyRecord>, где TMyRecord объявляется как:

type
  TMyRecord = record
    MyString: string;
    MyDouble: Double;
    MyInteger: Integer;
  end;

требуется какая-либо дополнительная работа или MyList.Free достаточна?

4b9b3361

Ответ 1

Резюме

MyList.Free.

Подробный ответ

Общий контейнер TList<T> содержит его содержимое. Когда вы освобождаете контейнер, содержимое также удаляется.

Теперь, если T является неуправляемой ссылкой, либо указателем, либо классом, то список владеет ссылкой. Он не владеет тем, на что ссылается ссылка. Поэтому, если у вас есть TList<TObject>, добавьте некоторые объекты, а затем освободите список, ссылки будут удалены, но объекты остаются. Итак, для решения этой проблемы существует TObjectList<T>. Этот контейнер может быть сконфигурирован так, чтобы владеть объектами, а также ссылками, и таким образом удалять объекты в соответствующий момент.

Теперь в вашем сценарии каждый из ваших списков содержит либо тип значения, либо управляемый тип. Список владеет этими объектами и распоряжается им, когда он уничтожен. Поэтому для всех ваших списков MyList.Free - это все, что вам нужно.