std::shared_ptr<T>::~shared_ptr
来自cppreference.com
<tbody>
</tbody>
~shared_ptr(); |
||
若 *this 拥有某个对象且它是最后一个拥有该对象的 shared_ptr,则通过其拥有的删除器销毁该对象。
析构后,与 *this 共享所有权的智能指针(若存在),将报告比先前值少一的 use_count()。
注解
不同于 std::unique_ptr,即使被管理指针为空也调用 std::shared_ptr 的删除器。
示例
运行此代码
#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'); // 将打印 "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> 的公开成员函数)
|