fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. class Foo
  5. {
  6. public:
  7. Foo() {std::cout<<"Foo()\n";}
  8. ~Foo() {std::cout<<"~Foo()\n";}
  9. };
  10.  
  11. class Bar : public Foo
  12. {
  13. public:
  14. Bar() {std::cout<<"Bar()\n";}
  15. ~Bar() {std::cout<<"~Bar()\n";}
  16. };
  17.  
  18. class Baz : public Bar
  19. {
  20. public:
  21. Baz() {std::cout<<"Baz()\n";}
  22. ~Baz() {std::cout<<"~Baz()\n";}
  23. };
  24.  
  25. int main()
  26. {
  27. std::cout<<"I am NOT using std::shared_ptr\n";
  28.  
  29. Foo* f = new Baz();
  30. delete f;
  31.  
  32.  
  33. std::cout<<"----------------------------------";
  34. std::cout<<"\nI am USING std::shared_ptr\n";
  35.  
  36. Bar* b = new Baz();
  37. std::shared_ptr<Foo> sp(b);
  38. sp.reset();
  39. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
I am NOT using std::shared_ptr
Foo()
Bar()
Baz()
~Foo()
----------------------------------
I am USING std::shared_ptr
Foo()
Bar()
Baz()
~Bar()
~Foo()