Home > Back-end >  What is the difference between assigning an empty array and using SetLength(arr, 0)?
What is the difference between assigning an empty array and using SetLength(arr, 0)?

Time:09-15

When emptying an array, is there any difference that one should be aware of between the following alternatives?

Assuming arr is a TArray<string>:

  SetLength(arr, 0);

or

  arr := [];

I'm guessing they are the same, but my Delphi is a bit rusty and I seem to recall subtle "peculiarities" coming back to haunt me after months of seemingly working code before...

CodePudding user response:

If arr is a dynamic array variable, then

SetLength(arr, 0)

and

arr := nil

and the new (Delphi XE7 )

arr := []

are all equivalent.

The key to understand this equivalence is the following part from the SetLength documentation:

Following a call to SetLength, S is guaranteed to reference a unique string or array -- that is, a string or array with a reference count of one.

Also, recall that an empty dynamic array is represented by a nil pointer, and not a pointer to a "length-zero dynamic array heap object":

When the variable is empty (uninitialized) or holds a zero-length array, the pointer is nil and no dynamic memory is associated with the variable.

  • Related