std::weak_ptr — non-owning reference to shared_ptr-managed object.
1#include <memory>23// Breaking circular references4class Node {5public:6 std::shared_ptr<Node> next;7 std::weak_ptr<Node> prev; // weak to break cycle8};910auto node1 = std::make_shared<Node>();11auto node2 = std::make_shared<Node>();12node1->next = node2;13node2->prev = node1; // weak, doesn't increase count1415// Accessing weak_ptr16std::weak_ptr<int> wptr = sp1;1718if (auto locked = wptr.lock()) {19 // Object still alive20 std::cout << *locked;21} else {22 // Object destroyed23}2425// Check if expired26if (wptr.expired()) {27 // Object is gone28}
Key points: