#include <iostream>
#include <memory>
using namespace std;
class MyObject {
private:
const char* name;
std::weak_ptr<MyObject> ptr;
public:
MyObject(const char* n) {
name = n;
cout << "create " << name << std::endl;
}
~MyObject() {
cout << "delete " << name << std::endl;
}
void setOther(std::weak_ptr<MyObject> p) {
ptr = p;
}
};
int main() {
// p1 et p2 sont alloué dynamiquement
MyObject* p1 = new MyObject("object1");
MyObject* p2 = new MyObject("object2");
// p3 est alloué dynamiquement via un smartpointeur
std::shared_ptr<MyObject> p3(new MyObject("object3"));
// p4 et p5 est alloué dynamiquement via un smartpointeur
// et on fait un lien monodirectionnel de p4 vers p5
std::shared_ptr<MyObject> p4(new MyObject("object4"));
std::shared_ptr<MyObject> p5(new MyObject("object5"));
p4->setOther(p5);
// p6 et p7 est alloué dynamiquement via un smartpointeur
// et on fait un lien bidirectionnel entre p6 et p7
std::shared_ptr<MyObject> p6(new MyObject("object6"));
std::shared_ptr<MyObject> p7(new MyObject("object7"));
p6->setOther(p7);
p7->setOther(p6);
cout << std::endl;
delete p1;
return 0;
}