As you stated the advantage of auto_ptr's is the fact they deal with cleans up's automatically. Such as if an object was created with new, and delete was never called for any reason such as program terminated before delete was called for any reason. Then indeed you have a memory leak! Where as no matter what auto pointers with delete any object they are assigned too.
However one dis advantage to the auto_ptr is the fact it doesn't like to be mixed with standard containers such as verctors. Also you cannot copy* an auto_ptr as the copies created are never an exacted copy. As you can imagine thats gonna end badly for everyone!
As for method 3...i'm not sure as thats even a pointer...you simple clear any contents at its memory location using memset...
Chris