Delphi: TObjectList не освобождает объект после вызова Delete () - PullRequest
1 голос
/ 15 марта 2020

У меня есть TObjectList<TUSBDevice>, где TUSBDevice - это класс, который я сделал. Я попытался вызвать Delete с индексом, переданным в качестве параметра, но он просто делает то, что делает TList.Delete(): удаляет указатель из списка, но не освобождает сам объект.

Точка останова, которую я установил на TUSBDevice.Destroy(), не прерывается при вызове Delete(). У меня также были часы на TObjectList, и я вижу, как элемент удаляется из списка, но содержимое по адресу памяти объекта не освобождается.

Деструктор TUSBDevice:

destructor TUSBDevice.Destroy();
begin
  removeDatabaseEntry();
  filteredFolders.Free();
  fileQueue.Free();
end;

1 Ответ

2 голосов
/ 15 марта 2020

Невозможно ответить на ваш вопрос, поскольку в нем нет минимального воспроизводимого примера; проблема не в коде, который вы выложили, а в другом месте.

Тем не менее, наиболее распространенная причина того, что «переопределенный» деструктор не работает, заключается в том, что он фактически не переопределен. Так что я почти могу поспорить, что в вашем объявлении Destroy отсутствует override:

TUSBDevice = class
  // ...
public
  // ...
  destructor Destroy; override;
  // ...
end;
...