在我的申请中我有以下记录:
TTransaction = record Alias: string Description: string Creation: TDateTime Count: Integer end;
我在这个数组中使用这个记录:
Transactions = array of TTransaction;
我在运行时保持阵列加载,但在给定的时间,我需要清除所有数据并添加一些新的.
是否足够使用:
SetLength(Transactions,0); ?
还是我需要确定一些东西?
解决方法
有三种方式来释放与动态数组的内存关联:a:
SetLength(a,0); Finalize(a); a := nil;
这取决于你使用哪一种.
documentation说的是一样的,虽然在时尚方面略显一圆:
To deallocate a dynamic array,assign nil to a variable that references the array or pass the variable to Finalize; either of these methods disposes of the array,provided there are no other references to it. Dynamic arrays are automatically released when their reference-count drops to zero. Dynamic arrays of length 0 have the value nil.
这将释放与数组关联的所有内存,包括由您的记录类型拥有的任何嵌套管理类型,如字符串,动态arrys等.
如果需要调整数组大小以备将来使用,并且可以使用新的数据,只需使用SetLength调整大小,并适当地初始化剩余的元素.