std::weak_ptr<T>::~weak_ptr
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Memory management library
(exposition only*)
(C++11)
(C++23)
(C++11)
(C++17)
(C++11)
(C++11)
(C++20)
(C++20)
(C++17)
(C++11)
(C++17)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
Uninitialized storage (until C++20)
(until C++20*)
(until C++20*)
(until C++20*)
Garbage collector support (until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)(until C++23)
(C++11)
(C++11)
(C++17)
(C++20)
(C++17)
(C++11)
(C++11)
(C++11)
(until C++17*)
(C++11)
(C++17)
(C++26)
(C++26)
(C++11)
(C++11)
(C++11)
(C++23)
(C++23)
(C++11)
(C++20)
(C++11)
(C++11)
(C++20)
(C++26)
std::weak_ptr
Member functions
weak_ptr::~weak_ptr
Modifiers
Observers
(C++26)
(C++26)
Non-member functions
Helper classes
(C++20)
Deduction guides (C++17)
~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_ptr s.
Run this code
#include <iostream> #include <memory> #include <variant> class Node { char id; std::variant <std::weak_ptr <Node>, std::shared_ptr <Node>> ptr; public: Node(char id) : id{id} {} ~Node() { std::cout << " '" << id << "' reclaimed\n"; } /*...*/ void assign(std::weak_ptr <Node> p) { ptr = p; } void assign(std::shared_ptr <Node> p) { ptr = p; } }; enum class shared { all, some }; void test_cyclic_graph(const shared x) { auto A = std::make_shared <Node>('A'); auto B = std::make_shared <Node>('B'); auto C = std::make_shared <Node>('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 <Node>(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
(public member function of
shared_ptr
s link to it (public member function of
std::shared_ptr<T>
) [edit]