std::swap mit std::auto_ptr



  • Kann man zwei auto_ptr mit std::swap miteinander vertauschen, oder geht das schief?


  • Mod

    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)


  • Mod

    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.


Anmelden zum Antworten