Für Records mit Managed Types wie (Long)Strings wird zwingend ein typisierter Pointer(cast) benötigt, denn sonst gibt es Speicherlöscher außer es gibt einen zusätzlichen Finalize Aufruf.
Delphi-Quellcode:
program RecordMemleak;
{$APPTYPE CONSOLE}
type
PRecord = ^TRecord;
TRecord = record
Value: string;
end;
var
TypedPointer: PRecord;
UntypedPointer: Pointer;
begin
ReportMemoryLeaksOnShutdown := True;
New(TypedPointer);
TypedPointer^.Value := 'Foo';
UntypedPointer := TypedPointer;
Dispose(UntypedPointer);
end.