我一直认为所有者负责销毁视觉控制,如果我nil
作为所有者传递,我可以手动控制销毁.
请考虑以下示例:
TMyForm = class (TForm)
private
FButton : TButton;
end;
...
FButton := TButton.Create(nil); // no owner!!
FButton.Parent := Self;
Run Code Online (Sandbox Code Playgroud)
我希望这个按钮产生内存泄漏,但它没有,实际上是析构函数TButton
被调用.
进一步调查显示TWinControl
析构函数包含以下代码片段:
I := ControlCount;
while I <> 0 do
begin
Instance := Controls[I - 1];
Remove(Instance);
Instance.Destroy;
I := ControlCount;
end;
Run Code Online (Sandbox Code Playgroud)
看起来它正在摧毁子组件(Parent
设置为控件本身的组件).
我没想到父控件会破坏控件.任何人都可以解释为什么会这样吗?如果我通过一个所有者,谁在摧毁这个物体?