Am 28.05.2015 18:16 schrieb "Jürgen Hestermann" <juergen.hesterm...@gmx.de>: > > Hi, > > when I have a record which has managed types (i.e. strings), > how are they handled by the compiler when I assign one record to the other? > Example: > > --------------------------------------------------- > type MyRecordType = record > X : SizeInt; > S : AnsiString; > end; > var A,B : ^MyRecordType; > > begin > new(A); > new(B); > A^.X := 7; > A^.S := 'String in A'; > B^ := A^; > Dispose(A); > end; > --------------------------------------------------- > > What happens to the reference counter of S? > Is it updated correctly (assigned to zero with new, > incremented with B^:=A^ and decremented with dispose)?
Yes, they are handled correctly. The compiler inserts a call to a RTL function that does a per-element copy using the record's RTTI instead of doing a memory copy (this is true for all records even if they don't have managed types). Regards, Sven
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal