function template
<memory>

std::get_deleter

template <class D, class T>  D* get_deleter (const shared_ptr<T>& sp) noexcept;
从shared_ptr获取deleter
返回指向sp所拥有的deleter的指针。

如果sp没有deleter,因此将使用::delete来删除其管理的*,该函数则返回一个空指针

只要存在一个shared_ptr实例拥有该deleter,返回的值至少就有效。

请注意,第一个模板参数是返回类型,因此不能由编译器自动推导。

参数

sp
一个shared_ptr对象。

返回值

指向所拥有的deleter的指针,如果存在的话。或者一个空指针,否则。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// get_deleter example
#include <iostream>
#include <memory>

struct D {    // a verbose array deleter:
  void operator()(int* p) {
    std::cout << "[deleter called]\n";
    delete[] p;
  }
};

int main () {
  std::shared_ptr<int> foo (new int[10],D());

  int * bar = new int[20];

  // use foo's deleter to delete bar (which is unmanaged):
  (*std::get_deleter<D>(foo))(bar);

  return 0;
  // foo's deleter called automatically
}

输出
[deleter called]
[deleter called]


另见