解决方案 »

  1.   

    st.Create;
    构造函数里会判断当前self是不是为空,如果不为空直接返回该对象。
    function _ClassCreate(AClass: TClass; Alloc: Boolean): TObject;
    asm
            { ->    EAX = pointer to VMT      }
            { <-    EAX = pointer to instance }
            PUSH    EDX
            PUSH    ECX
            PUSH    EBX
            TEST    DL,DL
            JL      @@noAlloc

            CALL    DWORD PTR [EAX] + VMTOFFSET TObject.NewInstance
    @@noAlloc:
    {$IFNDEF PC_MAPPED_EXCEPTION
      

  2.   

    放2个Memo上去把这个StringList加进去就会看到一模一样了
      

  3.   

    TClass.Create和Object.Create差别还不小呢,看这个例子帮助理解.
    procedure TForm1.FormCreate(Sender: TObject);
    var
      n : integer;
      P : Pointer;
      Obj : TEdit;
    begin
      n := TEdit.InstanceSize;  //得到TEdit对象需要的内存大小
      GetMem(P , n); //申请对象的内存空间
      FillChar(P^ , n , 0);  //清0
      PPointer(P)^ := TEdit;   //这句非常关键,把内存空间(结构)和类关联起来
      TEdit(P).Create(Self); //这句的作用就是实现对象的初始化,也就是把内存空间结构中的其他元素填好
      Obj := P;
      //到此,对象就建立好了,以上加起来和 Obj := TEdit.Create(Self);没区别  Obj.Top := 10;
      Obj.Left := 30;
      Obj.Text := '还可以这样..
      Obj.Parent := Self;
    end;
      

  4.   

    现在想想明白了,其实大概就是,Create本身不是申请内存的,而是建立对象和内存的关联的。