std::weak_ptr<T>::~weak_ptr
Материал из cppreference.com
~weak_ptr(); |
(начиная с C++11) | |
Уничтожает объект weak_ptr
. Не влияет на управляемый объект.
[править] Пример
Программа показывает эффект "неразрывного" цикла объектов std::shared_ptr.
Запустить этот код
#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 << "' очищен\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 << "Все ссылки являются общими указателями"; } else { C->assign(std::weak_ptr<Node>(A)); std::cout << "Одна ссылка это weak_ptr"; } /*...*/ std::cout << "\nВыход...\n"; } int main() { test_cyclic_graph(shared::some); test_cyclic_graph(shared::all); // производит утечку памяти }
Вывод:
Одна ссылка это weak_ptr Выход... 'A' очищен 'B' очищен 'C' очищен Все ссылки являются общими указателями Выход...
[править] Смотрите также
разрушает объект, которым владеет, если больше нет shared_ptr ссылающихся на него (public функция-элемент std::shared_ptr )
|