因为vcl的初始化实际上都是在newInstance里完成的。 create只是把最后的堆内存,变成可用的指针 在delphi源代码里,可以看到: class function TObject.NewInstance: TObject; begin Result := InitInstance(_GetMem(InstanceSize)); end; class function TObject.InitInstance(Instance: Pointer): TObject; {$IFDEF PUREPASCAL} var IntfTable: PInterfaceTable; ClassPtr: TClass; I: Integer; begin FillChar(Instance^, InstanceSize, 0); PInteger(Instance)^ := Integer(Self); ClassPtr := Self; while ClassPtr <> nil do begin IntfTable := ClassPtr.GetInterfaceTable; if IntfTable <> nil then for I := 0 to IntfTable.EntryCount-1 do with IntfTable.Entries[I] do begin if VTable <> nil then PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable); end; ClassPtr := ClassPtr.ClassParent; end; Result := Instance; end; {$ELSE} 可以看出,最终的构造是在newInstance里完成。