Listing 6
#include <memory>
#include <iostream>
using std::tr1::shared_ptr;
using std::cout;
class base
{ // base type with protected destructor
protected:
virtual ~base() { cout << "base destructor\n"; }
};
class derived : public base
{ // derived type with public destructor
public:
~derived() { cout << "derived destructor\n"; }
};
int main()
{ // resource deleted through constructor argument type
shared_ptr<base> sp(new derived);
// okay: derived::~derived accessible
shared_ptr<base> sp((base*)new derived);
// error: base::~base not accessible
return 0;
}