std::weak_ptr::weak_ptr - cppreference.com ([original](https://en.cppreference.com/w/cpp/memory/weak%5Fptr/weak%5Fptr.html)) (raw)

| ~weak_ptr(); | | (since C++11) | | -------------- | | ------------- |

Destroys the weak_ptr object. Results in no effect to the managed object.

[edit] Example

The program shows the effect of "non-breaking" the cycle of std::shared_ptrs.

#include #include #include   class Node { char id; std::variant<std::weak_ptr, std::shared_ptr> ptr; public: Node(char id) : id{id} {} ~Node() { std::cout << " '" << id << "' reclaimed\n"; } /...*/ void assign(std::weak_ptr p) { ptr = p; } void assign(std::shared_ptr p) { ptr = p; } };   enum class shared { all, some };   void test_cyclic_graph(const shared x) { auto A = std::make_shared('A'); auto B = std::make_shared('B'); auto C = std::make_shared('C');   A->assign(B); B->assign(C);   if (shared::all == x) { C->assign(A); std::cout << "All links are shared pointers"; } else { C->assign(std::weak_ptr(A)); std::cout << "One link is a weak_ptr"; } /...*/ std::cout << "\nLeaving...\n"; }   int main() { test_cyclic_graph(shared::some); test_cyclic_graph(shared::all); // produces a memory leak }

Output:

One link is a weak_ptr Leaving... 'A' reclaimed 'B' reclaimed 'C' reclaimed All links are shared pointers Leaving...

[edit] See also

| | destructs the owned object if no more shared_ptrs link to it (public member function of std::shared_ptr) [edit] | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |