std::shared_ptr::~shared_ptr
Материал из cppreference.com
< cpp | memory | shared ptr
~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> )
|