Я всегда думал, что владелец несет ответственность за уничтожение визуальных элементов управления и что я могу вручную управлять разрушением, если я передаю nil
как владелец.
] Рассмотрим следующий пример:
TMyForm = class (TForm)
private
FButton : TButton;
end;
...
FButton := TButton.Create(nil); // no owner!!
FButton.Parent := Self;
Я ожидал, что эта кнопка вызовет утечку памяти, но этого не произошло, и фактически вызывается деструктор TButton
.
Дальнейшее исследование показало, что ] Деструктор TWinControl
содержит следующий фрагмент кода:
I := ControlCount;
while I <> 0 do
begin
Instance := Controls[I - 1];
Remove(Instance);
Instance.Destroy;
I := ControlCount;
end;
, который выглядит так, как будто он уничтожает дочерние компоненты (те, у которых Parent
установлен для самого элемента управления).
Я не ожидал родительский элемент управления, чтобы уничтожить элемент управления. Кто-нибудь может объяснить, почему это происходит? И кто уничтожит объект, если я передам владельца?