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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top