function template
<memory>

std::get_deleter

template <class D, class T> D* get_deleter (const shared_ptr<T>& sp) noexcept;
Get deleter from shared_ptr
Returns a pointer to the deleter owned by sp.

If sp has no deleter, and thus would use ::delete to delete its managed object, the function returns a null pointer.

The returned value is valid at least as long as there exists a shared_ptr instance that owns that deleter.

Notice that the first template parameter is the return type, and thus cannot be automatically deduced by the compiler.

Parameters

sp
A shared_ptr object.

Return Value

A pointer to the owned deleter, if any. Or a null pointer otherwise.

Example

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 }

Output:
[deleter called] [deleter called] 


See also