fork(1) download
  1. #include <iostream>
  2. #include <memory>
  3. using namespace std;
  4.  
  5. class MyObject {
  6. private:
  7. const char* name;
  8. std::shared_ptr<MyObject> ptr;
  9.  
  10. public:
  11. MyObject(const char* n) {
  12. name = n;
  13. cout << "create " << name << std::endl;
  14. }
  15.  
  16. ~MyObject() {
  17. cout << "delete " << name << std::endl;
  18. }
  19.  
  20. void setOther(std::shared_ptr<MyObject> p) {
  21. ptr = p;
  22. }
  23. };
  24.  
  25. int main() {
  26. // p1 et p2 sont alloué dynamiquement
  27. MyObject* p1 = new MyObject("object1");
  28. MyObject* p2 = new MyObject("object2");
  29.  
  30.  
  31. // p3 est alloué dynamiquement via un smartpointeur
  32. std::shared_ptr<MyObject> p3(new MyObject("object3"));
  33.  
  34. // p4 et p5 est alloué dynamiquement via un smartpointeur
  35. // et on fait un lien monodirectionnel de p4 vers p5
  36. std::shared_ptr<MyObject> p4(new MyObject("object4"));
  37. std::shared_ptr<MyObject> p5(new MyObject("object5"));
  38. p4->setOther(p5);
  39.  
  40. // p6 et p7 est alloué dynamiquement via un smartpointeur
  41. // et on fait un lien bidirectionnel entre p6 et p7
  42. std::shared_ptr<MyObject> p6(new MyObject("object6"));
  43. std::shared_ptr<MyObject> p7(new MyObject("object7"));
  44. p6->setOther(p7);
  45. p7->setOther(p6);
  46.  
  47. cout << std::endl;
  48.  
  49. delete p1;
  50. return 0;
  51. }
Success #stdin #stdout 0s 3480KB
stdin
Standard input is empty
stdout
create object1
create object2
create object3
create object4
create object5
create object6
create object7

delete object1
delete object4
delete object5
delete object3