◐ Shell
clean mode source ↗

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> 的公开成员函数) [编辑]