new and dispose are used with pointers to records or other structures that contain automated types, so they are initialized/finalized properly. Since the string in your example is probably an ansistring, and therefore an automated type, you need to use new and dispose, which I suggest you use instead of getmem/freemem. I only use getmem/freemem for memory which has no type (e.g. plain pointers). As JSoftware said, the compiler will try to free the old string when it assigns the new one, but there is no old string, only garbage which was on the heap where your record got allocated.