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.
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]
|