fork download
  1. #include <memory>
  2. #include <string>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. static size_t indent = 0;
  8.  
  9. struct Base
  10. {
  11. int value;
  12.  
  13. Base(int value) : value(value) { }
  14. ~Base() {
  15. cout << string(indent*2, ' ') << "base destructor for " << value << endl;
  16. --indent;
  17. }
  18. };
  19.  
  20. struct Node : public Base
  21. {
  22. std::unique_ptr<Node> next;
  23.  
  24. Node(int value, Node* next) : Base(value), next(next) { }
  25.  
  26. ~Node()
  27. {
  28. ++indent;
  29. cout << string(indent*2, ' ') << "started destruction of " << value << endl;
  30. }
  31. };
  32.  
  33. int main()
  34. {
  35. Node* node = new Node(0, nullptr);
  36. for (int i = 1; i <= 5; ++i)
  37. node = new Node(i, node);
  38.  
  39. delete node;
  40.  
  41. return 0;
  42. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
  started destruction of 5
    started destruction of 4
      started destruction of 3
        started destruction of 2
          started destruction of 1
            started destruction of 0
            base destructor for 0
          base destructor for 1
        base destructor for 2
      base destructor for 3
    base destructor for 4
  base destructor for 5