std::shared_ptr<T>::~shared_ptr
~shared_ptr(); | (constexpr начиная с C++26) |
Если *this владеет объектом и является последним shared_ptr, владеющим им, объект уничтожается с помощью принадлежащего ему удалителя.
После уничтожения умные указатели, совместно владевшие объектом с *this, если таковые имеются, сообщат о значении use_count(), которое на единицу меньше его предыдущего значения.
Примечания
В отличие от std::unique_ptr, удалитель std::shared_ptr вызывается, даже если управляемый указатель равен null.
Пример
#include <iostream>
#include <memory>
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'); // would print "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 (открытая функция-член std::weak_ptr<T>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/shared_ptr/~shared_ptr