Question

GNU gcc 4.3 supporte partiellement le futur standard c ++ 0x: parmi les fonctionnalités implémentées, la référence rvalue. Au moyen de la référence rvalue, il devrait être possible de déplacer un objet non copiable ou de le retourner depuis une fonction.

Est-ce que std :: streams est déjà mobile au moyen de la référence rvalue ou l’implémentation actuelle de la bibliothèque manque-t-elle quelque chose?

Était-ce utile?

La solution

Dans le svn g ++ actuel, la prise en charge de la référence rvalue n'a pas encore été ajoutée aux flux. J'imagine que l'ajout de ce logiciel ne sera pas trop difficile et, comme toujours avec les logiciels open source, les correctifs sont, j'en suis sûr, les bienvenus!

Autres conseils

Après une brève enquête, il apparaît que le support référence de valeur n'a pas encore été ajouté aux flux.

Pour renvoyer un objet non copiable depuis une fonction, il suffit en fait d'implémenter le constructeur move comme suit:

struct noncopyable
{
    noncopyable()
    {}

    // move constructor
    noncopyable(noncopyable &&)
    {}

private:
    noncopyable(const noncopyable &);
    noncopyable &operator=(const noncopyable &);
};

Ce constructeur est supposé transférer la propriété sur le nouvel objet en laissant celui qui est passé dans un état par défaut.

Cela dit, il est possible de retourner un objet depuis une fonction de la manière suivante:

noncopyable factory()
{
    noncopyable abc;
    return std::move(abc);
}

Bien que std :: stream ne supporte pas les constructeurs de déplacement, il semble que les conteneurs STL livrés avec gcc 4.3.2 le prennent déjà en charge.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top