fork download
  1. #include <iostream>
  2. #include <memory>
  3. using namespace std;
  4.  
  5. class MyObject {
  6. private:
  7. const char* name;
  8. std::weak_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::weak_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 3432KB
stdin
Standard input is empty
stdout
create object1
create object2
create object3
create object4
create object5
create object6
create object7

delete object1
delete object7
delete object6
delete object5
delete object4
delete object3