首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于 TObject 基础有关问题

2012-03-14 
关于 TObject 基础问题,TObject的create和destroy方法是怎么为对象分配内存与释放内存的呢?调用了那个API

关于 TObject 基础问题,
TObject的create和destroy方法是怎么为对象分配内存与释放内存的呢?调用了那个API分配呢?

[解决办法]
这个是DELPHI的实现机制,主要是初始化RTTI和VMT
[解决办法]
你研究一下这个方法:

Delphi(Pascal) code
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;
[解决办法]
推荐楼主看看李维的VCL INSIDE,里面有详细的介绍。
[解决办法]
探讨
你研究一下这个方法:

Delphi(Pascal) code

class function TObject.InitInstance(Instance: Pointer): TObject;
{$IFDEF PUREPASCAL}
var
IntfTable: PInterfaceTable;
ClassPtr: TClass;
I: Integer;
begi……

[解决办法]
1.打开dcu调试功能
2.按F7跟踪Create
[解决办法]
NewInstance最终还是调用InitInstance方法,主要代码都在InitInstance中,如果配合李维的《Inside VCL》看会更明白。

热点排行