Joh*_*hny 2 delphi delphi-2010
令我惊讶的是,我发现对象的构造函数的"双重调用"是编译器可以接受的.知道这个用途的目的是什么,这个功能的结果是什么?
procedure TForm1.Button1Click(Sender: TObject);
var
vLabel : Tlabel;
begin
vLabel := Tlabel.Create(self).Create(self);
end;
Run Code Online (Sandbox Code Playgroud)
第二次调用Create就像常规过程调用一样:它省略了任何特殊的构造代码,只在构造函数中执行用户代码.在实践中,这对于能够从构造函数的实现中调用其他构造函数非常有用:
constructor TLabel.CreateHello(AOwner: TComponent);
begin
// Perform default construction.
Create(AOwner);
// Set default text.
Caption := 'Hello';
end;
Run Code Online (Sandbox Code Playgroud)
将此与C++进行比较,您必须将多个构造函数的共享逻辑移动到单独的函数,因为一旦创建了对象,就无法调用构造函数.Delphi解决方案非常优雅,可以鼓励代码重用.
为了实现这一点,构造函数有一个隐藏的额外布尔参数,用于指定是否执行完整构造逻辑(例如,内存分配).