Listing 8
#include <memory>
#include <iostream>
using std::tr1::shared_ptr; using std::tr1::get_deleter;
using std::cout;
struct S;
void delete_it(S *obj);
class S
{ // class with private destructor
friend void delete_it(S*);
~S() { cout << "destructor\n"; }
};
void delete_it(S *obj)
{ // destroy obj
delete obj;
}
int main()
{ // demonstrate use of deleter
shared_ptr<S> sp(new S, &delete_it);
if (get_deleter<void(*)(S*)>(sp))
cout << "has deleter of type void(*)(S*)\n";
else
cout << "doesn't have deleter of type void(*)(S*)\n";
return 0;
}