C ++ Builder> TControl.Parent属性>父级是否释放子级?

时间:2018-12-11 00:48:36

标签: c++builder

我的环境:

C++ Builder 10.2 Tokyo on Windows 10 v1809

我对TControl.Parent属性有疑问。

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TPanel *pnlptr = new TPanel(/*AOwner=*/this);
    TLabel *lblptr = new TLabel(/*AOwner=*/this);
    lblptr->Parent = pnlptr;

    // some processing

    //delete lblptr;
    delete pnlptr;
}

上面的代码是否释放了lblptr?

在文档中(尽管适用于2009年) TControl.Parent Property

  

注意:TControl中声明的Parent属性与TComponent中声明的Owner属性相似,因为控件的Parent会释放控件,就像组件的所有者释放该Component一样。

有了笔记,我认为当pnlptr被释放时,lblptr也被释放而没有delete lblptr

这对吗?

1 个答案:

答案 0 :(得分:1)

  

上面的代码是否释放了lblptr?

是的,确实如此。释放TPanel时,其基础TWinControl的析构函数将释放仍在Controls[]属性中的所有组件(将TWinControl设置为其Parent的控件):

destructor TWinControl.Destroy;
var
  I: Integer;
  Instance: TControl;
begin
  ...
  I := ControlCount;
  while I <> 0 do
  begin
    Instance := Controls[I - 1];
    Remove(Instance);
    Instance.Destroy; // <-- FREED HERE
    I := ControlCount;
  end;
  ...
end;
相关问题