MaxListSize = Maxint div 16;  
  PPointerList = ^TPointerList;
  TPointerList = array[0..MaxListSize - 1] of Pointer;
  TListSortCompare = function (Item1, Item2: Pointer): Integer;  TList = class(TObject)
  private
    FList: PPointerList;
    FCount: Integer;
-----------------------------
上述为TList的实现代码问题:
难道当创建TList类时,要为其分配array[0..MaxListSize - 1] of Pointer个空间吗,这岂不是太占内存了?

解决方案 »

  1.   

    说简单点就是:
    在FList: PPointerList执行后,编译器会不会生成array[0..MaxListSize - 1] of Pointer长度的数组?
      

  2.   

    不会,FList只是个指针。比如使用TList.Add或者Insert往List增加对象,Create创建对象,得到的对象指针指向TPointerList元素,这时才是分配内存。
      

  3.   

    FList: PPointerList
    是否相当于
    FList:^(array[0..MaxListSize - 1] of Pointer)?
    如果相等的话:那么这个语句仅仅不用生成内存就可以将数组首址传给FList???
    不可能吧!
    另外:
    生成数组的目的是做什么?
    就是为了申请连续性的地址空间?
    如果是,每次申请时用Realloc不就可以申请到连续的空间了吗?干嘛这么费劲!
      

  4.   

    仅仅只是告诉编译器PPointerList是指向类似TPointerList的指针类型.从而使得访问如List[Index]时编译器进行类型检查的时候不会报编译错误.
      

  5.   

    数组,即为连续的内存空间.但是似乎这并不是你问问题的本意.应该是想知道为什么要有TPointerList = array[0..MaxListSize - 1] of Pointer;这样一个声明.实际上,你只需要把它当成一个数组类型即可.