Sind std :: Ströme bereits beweglich?
Frage
GNU gcc 4.3 unterstützt teilweise die bevorstehenden C ++ 0x-Standard: unter dem die rvalue Referenz implementierten Features. Mit Hilfe der Referenz rvalue sollte es möglich sein, ein nicht-kopierbaren Objekt zu bewegen oder diese von einer Funktion zurückgegeben.
std :: Ströme bereits bewegliche durch rvalue Referenz oder hat die aktuelle Bibliothek Implementierung fehlt etwas?
Lösung
In dem aktuellen g ++ SVN, rvalue Referenz Unterstützung wurde Strom noch nicht hinzugefügt. Ich vermute, dass das Hinzufügen wird es nicht allzu schwierig sein, und wie immer mit Open-Source-Software, Patches sind, bin ich sicher, willkommen!
Andere Tipps
Nach einer kurzen Untersuchung kommt es, dass die rvalue Referenz Unterstützung wurde Strom noch nicht hinzugefügt.
Um wieder ein nicht-kopierbaren Objekt aus einer Funktion in der Tat ist es ausreichend, die Bewegung Konstruktor zu implementieren wie folgt:
struct noncopyable
{
noncopyable()
{}
// move constructor
noncopyable(noncopyable &&)
{}
private:
noncopyable(const noncopyable &);
noncopyable &operator=(const noncopyable &);
};
Ein solcher Konstruktor soll das Eigentum an der neuen Sache übertragen, die ein Verlassen in einem Standardzustand geführt wird.
Das heißt, ist es möglich, ein Objekt aus einer Funktion auf diese Weise zurück:
noncopyable factory()
{
noncopyable abc;
return std::move(abc);
}
Während std :: Strom nicht bewegen Bauer unterstützt es scheint, dass STL-Container mit gcc 4.3.2 ausgeliefert haben bereits unterstützen.