fork download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. class Ausgabedingens;
  7.  
  8. class Sinnlos
  9. {
  10. Ausgabedingens *out;
  11. public:
  12. Sinnlos();
  13. void tu_was_sinnloses();
  14. Ausgabedingens* imbue(Ausgabedingens *neuer_wert)
  15. {
  16. Ausgabedingens *alter_wert = out;
  17. out = neuer_wert;
  18. return alter_wert;
  19. }
  20. };
  21.  
  22. class Ausgabedingens
  23. {
  24. string wert;
  25. Ausgabedingens *altes_dingens;
  26. Sinnlos &sinn;
  27. public:
  28. Ausgabedingens(string wert, Sinnlos &sinn): wert(wert), altes_dingens(sinn.imbue(this)), sinn(sinn) { }
  29. void write(string was) { cout << wert << was; }
  30. ~Ausgabedingens() {sinn.imbue(altes_dingens); }
  31.  
  32. Ausgabedingens(Ausgabedingens&) = delete;
  33. void operator=(Ausgabedingens&) = delete;
  34. };
  35.  
  36. void Sinnlos::tu_was_sinnloses() {if (out) out->write("Huhu.\n"); }
  37. Sinnlos::Sinnlos(): out(nullptr) {}
  38.  
  39.  
  40. Sinnlos GlobalGraphicsContext;
  41.  
  42. int main()
  43. {
  44. Ausgabedingens BackBuffer1("Ding 1: ", GlobalGraphicsContext);
  45. GlobalGraphicsContext.tu_was_sinnloses();
  46. {
  47. Ausgabedingens BackBuffer2("Ding 2: ", GlobalGraphicsContext);
  48. GlobalGraphicsContext.tu_was_sinnloses();
  49. }
  50. GlobalGraphicsContext.tu_was_sinnloses();
  51. }
  52.  
Success #stdin #stdout 0s 3028KB
stdin
Standard input is empty
stdout
Ding 1: Huhu.
Ding 2: Huhu.
Ding 1: Huhu.