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; }