tbs0292.pp 881 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. {$mode objfpc}
  2. type
  3. pobj = ^tobj;
  4. tobj = object
  5. a: ansistring;
  6. constructor init(s: ansistring);
  7. destructor done;
  8. end;
  9. PAnsiRec = ^TAnsiRec;
  10. TAnsiRec = Packed Record
  11. Maxlen,
  12. len,
  13. ref : Longint;
  14. First : Char;
  15. end;
  16. const firstoff = sizeof(tansirec)-1;
  17. var o: pobj;
  18. t: ansistring;
  19. constructor tobj.init(s: ansistring);
  20. begin
  21. a := s;
  22. end;
  23. destructor tobj.done;
  24. begin
  25. end;
  26. const
  27. s : string = ' with suffix';
  28. var
  29. refbefore : longint;
  30. begin
  31. t:='test'+s;
  32. refbefore:=pansirec(pointer(t)-firstoff)^.ref;
  33. writeln('refcount before init: ',pansirec(pointer(t)-firstoff)^.ref);
  34. new(o,init(t));
  35. writeln('refcount after init: ',pansirec(pointer(t)-firstoff)^.ref);
  36. dispose(o,done);
  37. writeln('refcount after done: ',pansirec(pointer(t)-firstoff)^.ref);
  38. if refbefore<>pansirec(pointer(t)-firstoff)^.ref then
  39. Halt(1);
  40. end.