The std::auto_ptr class template handles only a pointer to a single object. This is because it uses scalar delete, never delete[], to destroy the owned object. Therefore, binding auto_ptr to an array of objects would cause undefined behavior. Using of auto_ptr as a char pointer is a common mistake:
std::auto_ptr< char> pc (new char[1000];) // bad
In this example, the auto_ptr object is bound to an array of char allocated by new[]. Such an array must be deleted with delete[]. However, because auto_ptr calls delete when its destructor executes, the program’s behavior is undefined.
Remember always to bind ats::auto_ptr to a pointer to a single object. If you’re looking for an auto_ptr that handles arrays, you can find a custom version of it at the www.boost.org site.