TStrings,TStringList都没有Create
那意味着直接继承于TObject
可是TObject的Create根本就没有内容
只有
begin 
end;那还初始化什么??不理解,还望高手指点

解决方案 »

  1.   

    看了一下DELPHI的帮助,就是TOBJECT的CREATE方法。The Create constructor defined by TObject allocates memory but does not initialize data.看来开始的估计是正确的。
      

  2.   

    分配空间。
    Tstrings,TStringList是类。他必须创建生成对象才可以使用。
      

  3.   

    又查了一段资料:而TObject的Create构造函数调用了系统的ClassCreate过程。系统的ClassCreate过程又通过调用TObject类的虚方法NewInstance。调用TObject的NewInstance方法的目的是要建立对象的实例空间。TObjec类的NewInstance方法将根据编译器在类信息数据中初始化的对象实例尺寸(InstanceSize),调用GetMem过程为该对象分配内存。然后调用TObject类InitInstance方法将分配的空间初始化。InitInstance方法首先将对象空间的头4个字节初始化为指向对象类的VMT的指针,然后将其余的空间清零。建立对象实例最后,还调用了一个虚方法AfterConstruction。最后,将对象实例数据的地址指针保存到AnObject变量中,这样,AnObject对象就诞生了。原来是这样的啊
      

  4.   

    constructor TObject.Create;
    begin
    end;
    这是TObject的构造函数
    好象没有调用什么呀
      

  5.   

    有机会看一下李维的inside VCL说得很详细,borland用了一个资源分配管理器在编译器中,没有由于涉及到很高深的技术,所以没有公开出来。所以你Create时,看不到什么码,但其他由于你声明了constructor,所以编译器会自动为你的类分配资源。所以这一点是不用担心的
      

  6.   

    你只要记住一点就可以了,类的构造函数给用户调用的用处基本上就是初始化一些类成员或其他一些相关操作,而真正的对象创建是不要你干预的,Delphi的编译器自动会创建的,基本原理就是楼上所说调用ClassCreate函数及以下的一系列操作。对象销毁时也一样,是调用ClassDestory函数来释放内存,析构函数的用处是销毁你在类中自定义的一些成员!
      

  7.   

    另外,由于TStrings是一个抽象类(它含有抽象方法),所以你无法直接调用TStrings.Create,而是要调用它的派生类的构造函数,比如:
    var Strs: TStrings;
    begin
      Strs := TStringList.Create;
      //操作
    end;
      

  8.   

    关于
    由于TStrings是一个抽象类(它含有抽象方法),所以你无法直接调用TStrings.Create,而是要调用它的派生类的构造函数,比如:
    var Strs: TStrings;
    begin
      Strs := TStringList.Create;
      //操作
    end;不用讲了============
    borland用了一个资源分配管理器在编译器中,没有由于涉及到很高深的技术不信==========
    《delphi原子世界》
    没看过
      

  9.   

    那楼主你到底理解了没有,还是没有或不信,那可以去问Borland的工程师!他们应该知道这是怎么回事的!
      

  10.   

    请参见
    http://community.csdn.net/Expert/topic/3106/3106729.xml?temp=7.032412E-02
      

  11.   

    我不是叫你去看李维的inside VCL,他已经讲得很清楚了,你不信那是你的事了。
    反正我就说了我该说了的。