Listing 3

#include <memory>
#include <iostream>
using std::tr1::shared_ptr;
using std::cout;

struct S
  { // simple struct
  void call_me(const char *desc) const
    { // member function
    cout << "called me, " << desc << '\n';
    }
  };

int main()
  { // demonstrate use of controlled resource
  shared_ptr<S> sp(new S);
  sp->call_me("used operator->");
  sp.get()->call_me("used member function get()");
  (*sp).call_me("used operator*");
  return 0;
  }