std::swap mit std::auto_ptr
-
Kann man zwei auto_ptr mit std::swap miteinander vertauschen, oder geht das schief?
-
Das ist verboten - es dürfte im allgemeinen allerdings funktionieren. Ist eher unverständlich, warum hier keine Spezialisierung existiert.
-
Ich habs mir schon fast gedacht, aber ich hätt nicht gedacht, dass keine Spezialisierung existiert.
Da das tauschen doch recht tricky ist:
template< typename T > void swap( std::auto_ptr< T >& lhs, std::auto_ptr< T >& rhs ) { T* tmp = lhs.release(); lhs.reset( rhs.release() ); rhs.reset( tmp ); }wenn man ein release vergisst und ein get nimmt ists schon passiert (ist mir selbst passiert)
-
Tatsächlich würde ein normaler Dreieckstausch:
template< typename T > void swap( T& lhs, T& rhs ) { T tmp = lhs; lhs = rhs; rhs = tmp; }auch für auto_ptr funktionieren. Insofern passiert wahrscheinlich nichts schlimmes, wenn man std::swap anwendet - nur genügt auto_ptr eben eigentlich nicht den Anforderungen, die an die Parameter gestellt werden.