Согласно краткому описанию класса , вызов a.release();
сделает свое дело, так как документы утверждают, что постусловие вызова release
состоит в том, что "все указатели равны нулю".
Действительно, взгляд на реализацию подтверждает это, хотя он менее эффективен, чем строго возможный, поскольку включает в себя неиспользованное / потраченное (для ваших целей) выделение кучи:
std::auto_ptr<this_type> release()
{
std::auto_ptr<this_type> ptr( new this_type );
this->swap( *ptr );
return ptr;
}