When a dynamic array is freed, its elements are handled the same way as
local stack variables are. When a dynamic array is shortened, the elements
about to be removed are finalized, à la the
Finalize procedure. (For that reason, it is essential that you
not call Finalize yourself.)
This means that all AnsiString, interface, and dynamic-array
elements have their reference counts decremented (which may trigger them to be
destroyed). WideString elements are destroyed.
Variant elements are unassigned. If the dynamic array is an array
of records with fields of any of those types, the records’ elements will
also be finalized—the finalization operation is recursive. Objects
and dynamically allocated pointers are not destroyed; it is your
responsibility to free them at the appropriate time.