Пространства имён
Варианты
Действия

std::shared_ptr::~shared_ptr

Материал из cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
~shared_ptr();

Если *this владеет объектом, и это последний shared_ptr, владеющий им, объект уничтожается с помощью принадлежащего средства удаления.

После уничтожения умные указатели, которые совместно владеют *this, если таковой имеется, возвращают use_count(), которое на единицу меньше, чем её предыдущее значение.

[править]Примечание

В отличие от std::unique_ptr, средство удаления std::shared_ptr вызывается, даже если управляемый указатель равен нулю.

[править]Пример

#include <memory>#include <iostream>   struct S { S(){std::cout<<"S::S()\n";} ~S(){std::cout<<"S::~S()\n";}struct Deleter {void operator()(S* s)const{std::cout<<"S::Deleter()\n"; delete s;}};};   int main(){auto sp =std::shared_ptr<S>{ new S, S::Deleter{}};   auto use_count =[&sp](char c){std::cout<< c <<") use_count(): "<< sp.use_count()<<'\n';};   use_count('A');{auto sp2 = sp; use_count('B');{auto sp3 = sp; use_count('C');} use_count('D');} use_count('E');   // sp.reset();// use_count('F'); // напечатает "F) use_count(): 0"}

Вывод:

S::S() A) use_count(): 1 B) use_count(): 2 C) use_count(): 3 D) use_count(): 2 E) use_count(): 1 S::Deleter() S::~S()

[править]Смотрите также

уничтожает weak_ptr
(public функция-элемент std::weak_ptr<T>)[править]
close