Because he did not understand that the string types are a higher abstraction from a dynamic array? I tried to answer that. Sven explained why the exception is shortstring, I explained the exception for the pointer types, which, by casting, causes copy on write. I forgot to mention that.
Any string type, with the exception of shortstrings declared with a given length, is essentially a dynamic array, differing in how it is managed.
- shorstrings declare length at byte zero
- PChar types terminate with #0 (and use the inefficient strlen() to determine length)
- all other strings named string store size and refcount at negative offset from [1]
- except the quirky use of {$zerobasedstrings on} which is deprecated by its introducer: Delphi and only existed for a few releases.