TJob = Record
      Weights,Delimiter,Usetime:integer;
    End;    TJobArray = Array of TJob;    TJobTable = class
    private
      JobArray:TJobArray;
    public
      constructor Create(arrSize:integer);
    End;
    constructor TJobTable.Create(arrSize: integer);
    begin
      Size := arrSize;
      SetLength(JobArray, Size);
    end;
    我想问的问题就是:
    1,TJobTable的一个实例在进行free的时候,要不要对他里面的成员数组JobArray里的每个元素进行dispose.
    2,如果JobArray里面的元素是一个个的对象的话,要不要分别对里面每个对象进行free
    谢谢了...呵呵

解决方案 »

  1.   

    是的
    首先在tobject中free的实现是:
    prcedure Tobject.Free;
     begin
      if self<>nil then destroy;
     end;
    因为你的类继承于Tobject,所以只要override析构函数Destroy,在释放的时候调用free.
    在Destroy重要作的工作就是将所有的动态分配变量dispose.对象也相当于动态变量,所以也要dispose掉.不过我们用free来完成这个工作.
      

  2.   

    如果成员数组里的每个元素(或对象)new或Create的话,就要dispose和free
      

  3.   

    如果我用这样的方法:JobArray[i]:=Job,来给JobArray中的元素进行赋值的话,而不是用new。那么JobArray里面的每个元素还还有Dispose吗?
      

  4.   

    同样,如果JobArray中的事对象,我用JobArray[i]:=Job(Job现在是一个对象),这种方法其每个元素进行赋值的话,而不用create.那么JobArray里面个每个元素还有free吗?
      

  5.   

    这个我没有验证过
    不过感觉上,这样的赋值是让jobarray[i]和job指向同一个对象
      

  6.   

    验证过了,的确是那样子的
    JobArray[i]:=Job(Job现在是一个对象)是把job对象的地址赋给jobarray[i]
    对jobarray[i]内成员的修改可以引起job内成员的改变
      

  7.   

    new和dispose都在system单元中
    他们叫做动态分配例程(dynamic allocation routines)
    除了new和dispose还有其他几个,他们是:
    Dispose               procedure
    Finalize              procedure
    FreeMem               procedure
    GetMem                procedure
    Initialize            procedure
    New                   procedure
      

  8.   

    如果我用这样的方法:JobArray[i]:=Job,来给JobArray中的元素进行赋值的话,而不是用new。那么JobArray里面的每个元素还还有Dispose吗?
    >>你可以不用管JobArray,因为JobArray指向Job,但你要负责Job的管理