fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <memory>
  4.  
  5. struct Node;
  6. typedef std::shared_ptr<Node> NodePtr;
  7.  
  8. struct Node
  9. {
  10. int value;
  11. NodePtr next;
  12. Node(int arg) : value(arg) {}
  13. ~Node() { std::cout << "Deleting " << value << '\n'; }
  14. };
  15.  
  16. int main()
  17. {
  18. // simple list population
  19. NodePtr head;
  20. NodePtr* p = &head;
  21. for (int i=1; i<=20; ++i)
  22. {
  23. p->reset(new Node(i));
  24. p = &(*p)->next;
  25. }
  26.  
  27. // leaving now would be BAD.
  28.  
  29. // proper cleanup. note that after the head reassignment
  30. // only one outstanding shared pointer references the
  31. // former head: victim. Two still reference the new list
  32. // front: head and victim->next, and the latter will be
  33. // released as soon as the while-scope exits and victim
  34. // is deleted.
  35. while (head)
  36. {
  37. NodePtr victim = head;
  38. head = head->next;
  39. }
  40. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Deleting 1
Deleting 2
Deleting 3
Deleting 4
Deleting 5
Deleting 6
Deleting 7
Deleting 8
Deleting 9
Deleting 10
Deleting 11
Deleting 12
Deleting 13
Deleting 14
Deleting 15
Deleting 16
Deleting 17
Deleting 18
Deleting 19
Deleting 20