Ваш деструктор должен переопределить деструктор базового класса
destructor Destroy; override;
В противном случае он не будет вызван Free
.
И вам также следует вызвать унаследованный деструктор.
destructor TFrame.Destroy;
begin
ListboxItem.Free;
inherited;
end;
Кроме того, используйте Free
вместо прямого вызова деструктора, чтобы ваш код был защищен от nil
ссылок.
В коде могут быть и другие ошибки, которые мы не можем видеть.