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]


另見