命名空间
变体
操作

std::shared_ptr<T>::~shared_ptr

来自 cppreference.cn
< cpp‎ | memory‎ | shared ptr
 
 
内存管理库
(仅为说明目的*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
 
~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'); // 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> 的公共成员函数) [编辑]