Frage zu Konstruktor und .swap()



  • Hallo,
    ich wollte mir eine kleine Funktion schreiben, die einen Container der stl leert (und auch allen reservierten Speicher freigibt). Mein Ansatz sieht so aus. Allerdings verstehe ich eine Sache nicht:

    template<typename T> inline void container_clear(T& container)
    {
        //container.swap(T());  //funktioniert nicht
        (T()).swap(container);  //funktioniert
    }
    

    Warum funktioniert container.swap(T()); nicht?

    In function void container_clear(T&) [with T = std::vector<int, std::allocator<int> >]
    error: no matching function for call to std::vector<int, std::allocator<int> >::swap(std::vector<int, std::allocator<int> >)
    note: candidates are: void std::vector<_Tp, _Alloc>::swap(std::vector<_Tp, _Alloc>&) [with _Tp = int, _Alloc = std::allocator<int>]
    

    Aus der Fehlermeldung kann ich den Grund nicht erkennen.



  • TrekC schrieb:

    Warum funktioniert container.swap(T()); nicht?

    Elementfunktionen können auf temporären Objekten aufgerufen werden.
    Du kannst aber temporäre Objekte nicht an eine Funktion übergeben, die das Objekt verändern will, indem sie eine "nicht-const-Referenz" entgegen nimmt.

    (Mit "temporär" sind hier namenlose Objekte wie T() gemeint)


Anmelden zum Antworten