Yes. Doing it this way has the potential to save reallocations.
True, but it can go the other way.
To save the re-alloc, the code must
not contain "result := nil". => Which would be the way to initialize result.
Because
"SetLenght(result, NewLen);"
gives the "managed type not initialized" hint. (which is needed to omit the re-alloc, if the size is kept or changed within bounds that fit current mem alloc)
But, if you don't set to "nil" first, and if the old value that happens to be in result, is a very large array, and if you increase the size further...
e.g. you have
SetLenght(Result, CachedPreviousUsedResLen + large_increase);
Then the old memory may need to be relocated. Leading to a (most likely) unnecessary copy of large memory chunks.