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> ) |