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
谢谢了...呵呵
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
谢谢了...呵呵
首先在tobject中free的实现是:
prcedure Tobject.Free;
begin
if self<>nil then destroy;
end;
因为你的类继承于Tobject,所以只要override析构函数Destroy,在释放的时候调用free.
在Destroy重要作的工作就是将所有的动态分配变量dispose.对象也相当于动态变量,所以也要dispose掉.不过我们用free来完成这个工作.
不过感觉上,这样的赋值是让jobarray[i]和job指向同一个对象
JobArray[i]:=Job(Job现在是一个对象)是把job对象的地址赋给jobarray[i]
对jobarray[i]内成员的修改可以引起job内成员的改变
他们叫做动态分配例程(dynamic allocation routines)
除了new和dispose还有其他几个,他们是:
Dispose procedure
Finalize procedure
FreeMem procedure
GetMem procedure
Initialize procedure
New procedure
>>你可以不用管JobArray,因为JobArray指向Job,但你要负责Job的管理