WeG*_*ars 4 memory delphi initialization
在某些情况下,我需要设置动态数组的大小,然后用零填充它.
就像是:
procedure SetLengthAndZero(VAR X; NewSize: Integer);
begin
SetLength(x, newsize);
if newsize > 0
then FillChar(x[0], length(x)* SizeOf(x[0]), 0);
end;
Run Code Online (Sandbox Code Playgroud)
但上面的代码(显然)不会编译.
LU *_* RD 14
阅读Embarcadero的文档:
Run Code Online (Sandbox Code Playgroud)procedure SetLength(var S: <string or dynamic array>; NewLength: Integer);对于动态数组变量,SetLength将S引用的数组重新分配给给定的长度.保留数组中的现有元素,并将新分配的空间设置为0或nil.
这意味着这SetLength就是你想要的.
如果你想清除整个动态数组,而不仅仅是分配更多的项目和保留现有的项目,只需要调用SetLength与NewLength = 0与期望长度再次调用它.
通用解决方案:
Type
TDynArrayTool = record
class procedure ClearAndSetLength<T>( var arr : TArray<T>; newLen : Integer); static;
end;
class procedure TDynArrayTool.ClearAndSetLength<T>(var arr: TArray<T>;
newLen: Integer);
begin
Setlength(arr,0);
SetLength(arr,newLen);
end;
Run Code Online (Sandbox Code Playgroud)