uw22741a.pp 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. unit uw22741a;
  2. {$mode objfpc}
  3. interface
  4. uses uw22741b;
  5. type
  6. iIO= interface
  7. procedure read;
  8. procedure write;
  9. end;
  10. tc= class(tInterfaceObject, iIO)
  11. procedure read; virtual;
  12. procedure write; virtual;
  13. destructor destroy; override;
  14. end;
  15. type
  16. td= class(tObject, iIO)
  17. ftc: tc;
  18. fiio: iIO;
  19. property io: tc read ftc implements iIO;
  20. constructor create; virtual;
  21. destructor destroy; override;
  22. end;
  23. implementation
  24. procedure tc.read; begin end;
  25. procedure tc.write; begin end;
  26. destructor tc.destroy;
  27. begin
  28. writeln('tc ', nativeuint(self), ' destroyed');
  29. inherited;
  30. end;
  31. constructor td.create;
  32. begin
  33. inherited;
  34. ftc:= tc.create;
  35. fiio:= ftc; // increace reference counter to one
  36. end;
  37. destructor td.destroy;
  38. begin
  39. fiio:= nil; // ftc is automatically destroyed
  40. ftc.free;
  41. writeln('td ', nativeuint(self), ' destroyed');
  42. inherited;
  43. end;
  44. end.