简体   繁体   English

Delphi动态数组

[英]Delphi dynamic array

I'm using Delphi 10.0 Seattle. 我正在使用Delphi 10.0 Seattle。

Suppose I have a record like this: 假设我有一条这样的记录:

TmyRecord = record
  a,b : string;
  ar  : array of string
end;

And a variable like this: 和这样的变量:

v : array of TmyRecord;

and some code like this: 和一些这样的代码:

SetLength(v,2);
SetLength(v[0].ar,3);
SetLength(v[1].ar,2);
SetLength(v[0].ar[0],10);
SetLength(v[0].ar[1],5);
SetLength(v[0].ar[2],7);
...
v[0].ar[0][0] := 'aaaa';
v[0].ar[0][1] := 'bbbb';
....
v[1].ar[1][0] := 'xxxx';

Will this statement: 请问这个说法:

SetLength(v,0);

free all of the occupied memory, or do I have to free it manually? 释放所有占用的内存,还是我必须手动释放它?

Dynamic array memory is automatically managed by Delphi and is released when they go out of scope. 动态数组内存由Delphi自动管理,并在超出范围时释放。

Clearing v array will automatically release all memory including the ones occupied by ar member of your record. 清除v数组将自动释放所有内存,包括记录中ar成员占用的内存。

You don't have to do anything else. 您无需执行其他任何操作。

You can also clear v array by setting it to nil 您也可以通过将v数组设置为nil来清除它

v := nil;

or by using the intrinsic Finalize : 或使用固有的Finalize

Finalize(v);

All of these have identical meaning. 所有这些都具有相同的含义。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM