std::shared_ptr<T>::~shared_ptr

来自cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)



 
 
~shared_ptr();

*this 占有对象且它是最后一个占有该对象的 shared_ptr ,则通过占有的删除器销毁对象。

析构后,与 *this 共享所有权的智能指针若存在,则报告比先前值少一的 use_count()

注解

不同于 std::unique_ptr ,即使被管理指针为空也调用 std::shared_ptr 的删除器。

示例

#include <memory>
#include <iostream>
 
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');
}

输出:

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()
F) use_count(): 0

参阅

销毁 weak_ptr
(std::weak_ptr<T> 的公开成员函数)