Figure 1: Illustrates case where pointers work as expected but auto_ptr objects do not

void foo(Object* obj)
{
   Object* tmp = obj;
   tmp->something();
}
void func()
{
   Object* obj = new Object;
   foo(obj);
   obj->something();
}

void foo(auto_ptr<Object> obj)
{
   auto_ptr<Object> tmp = obj;
   tmp->something();

   // tmp owns the Object data
   // and deletes them when goes
   // out of visibility scope.
}
void func()
{
   auto_ptr<Object> obj = new Object;
   foo(obj);

   // Object data has been deleted
   // within foo().
   // obj points nowhere!

   obj->something(); // A problem.
}
//End of File