TObjectList и пользовательский класс деструктора - PullRequest
0 голосов
/ 13 апреля 2020

Я использую пользовательский класс TFrame в TObjectList. TFrame содержит ListBoxItem и записи. Их родитель может быть только TListBox.

  TFrame = class
    ListboxItem: TListBoxItem;
    Name: string;
    PosStart,
    PosEnd : integer;
    Max: TData;
    Min: TData;
    Sqrt: TData;
    constructor Create (ListBox: TListBox);
    destructor Destroy;
  end;

destructor TFrame.Destroy;
  begin
    ListboxItem.destroy;
  end;

как написать деструктор для правильного удаления с помощью ObjectList.Delete (i)? Теперь, если мне не удастся попытаться удалить - у меня есть видимые элементы с сообщением об исключении.

Ты много!

1 Ответ

3 голосов
/ 14 апреля 2020

Ваш деструктор должен переопределить деструктор базового класса

destructor Destroy; override;

В противном случае он не будет вызван Free.

И вам также следует вызвать унаследованный деструктор.

destructor TFrame.Destroy;
begin
  ListboxItem.Free;
  inherited;
end;

Кроме того, используйте Free вместо прямого вызова деструктора, чтобы ваш код был защищен от nil ссылок.

В коде могут быть и другие ошибки, которые мы не можем видеть.

...