Pregunta

GNU gcc 4.3 admite parcialmente el próximo estándar c ++ 0x: entre las características implementadas, la referencia rvalue. Mediante la referencia rvalue debería ser posible mover un objeto no copiable o devolverlo desde una función.

¿Los std :: streams ya se pueden mover por medio de la referencia rvalue o la implementación de la biblioteca actual carece de algo?

¿Fue útil?

Solución

En el g ++ svn actual, el soporte de referencia rvalue aún no se ha agregado a las transmisiones. Sospecho que agregarlo no será demasiado difícil y, como siempre con el software de código abierto, los parches son, estoy seguro, ¡bienvenidos!

Otros consejos

Después de una investigación rápida, resulta que el soporte de rvalue reference aún no se ha agregado a las transmisiones.

Para devolver un objeto no copiable desde una función, de hecho es suficiente implementar el mover constructor de la siguiente manera:

struct noncopyable
{
    noncopyable()
    {}

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

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

Se supone que dicho constructor transfiere la propiedad al nuevo objeto dejando el que se pasa en un estado predeterminado.

Dicho esto, es posible devolver un objeto de una función de esta manera:

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

Si bien std :: stream no admite constructores de movimiento, parece que los contenedores STL enviados con gcc 4.3.2 ya lo admiten.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top