public member function
<memory>

std::shared_ptr::~shared_ptr

~shared_ptr();
销毁 shared_ptr
销毁对象。但是,根据成员 use_count 的值,它可能会产生以下副作用:

  • 如果 use_count 大于1(即,对象正在与其它 shared_ptr 对象共享其管理对象的拥有权):其它与之共享拥有权的对象的 use count 减 1。1.
  • 如果 use_count1(即,对象是其所管理指针的 唯一 拥有者):指向其所管理指针的对象被删除(如果 shared_ptr 对象是用特定的 deleter 构建的,则调用该 deleter;否则,该函数使用 operatordelete).
  • 如果 use_count 为零(即,对象为空),此析构函数没有任何副作用。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// shared_ptr destructor example
#include <iostream>
#include <memory>

int main () {
  auto deleter = [](int*p){
    std::cout << "[deleter called]\n"; delete p;
  };

  std::shared_ptr<int> foo (new int,deleter);

  std::cout << "use_count: " << foo.use_count() << '\n';

  return 0;                        // [deleter called]
}

输出

use_count: 1
[deleter_called]


另见