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)