std::shared_ptr<T>::~shared_ptr - cppreference.com
来自cppreference.com
| (C++26 起为 constexpr) | ||
如果 *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> 的公开成员函数) [编辑]
|