分配空数组和使用SetLength(arr,0)有什么不同?

2j4z5cfb  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(145)

清空数组时,您应该注意以下几种选择之间的区别吗?

假设arrTArray<string>

SetLength(arr, 0);

arr := [];

我猜它们是一样的,但我的Delphi有点生 rust 了,我似乎记得在之前几个月看似有效的代码之后,微妙的“奇特”再次困扰着我……

hsvhsicv

hsvhsicv1#

如果arr是动态数组变量,则

SetLength(arr, 0)

arr := nil

和新的(Delphi XE7+)

arr := []

都是等同的。

理解这种等价性的关键是SetLength文档中的以下部分:
在调用SetLength之后,S保证引用唯一的字符串或数组--即引用计数为1的字符串或数组。

另外,回想一下,空的动态数组由nil指针表示,而不是指向“长度为零的动态数组堆对象”的指针:

当变量为空(未初始化)或包含零长度数组时,指针为nil,且没有与变量关联的动态内存。

相关问题