tb0252.pp 980 B

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