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;) // 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.