An auto_ptr object wraps a heap object, and deletes it judiciously. You don’t need to delete the heap object.
– If I go out of scope, I delete referent.
– release() ? detach from the referent without deletion, and hold null. A simple but important method.
– reset(p) ? delete current referent, and attach to incoming referent. see . Note referent is a regular ptr, not auto_ptr
– auto_ptr as rval (ie RHS) in copier or assignment? I will hold null after ownership transfer. See 
– auto_ptr as lval ? delete current referent (if any), then become owner of the incoming referent, and release the RHS auto_ptr. see 
 before taking on a new referent object, I always delete current referent to avoid leak
 after giving up ownership, I hold null
 never wrap a non-heap object, or the delete() will crash
! not safe as elements in containers — non-standard copier and assignment
! if you independently put the same object into 2 auto_ptr, and one of them subsequently deletes the pointee, making the other a stray dog
standard auto_ptr is a template class …