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