Pergunta

GNU gcc 4.3 suporta parcialmente o próximo c ++ 0x padrão: entre os implementada apresenta a referência de rvalue. Por meio da referência rvalue deve ser possível deslocar um objecto não copiável ou retorná-lo a partir de uma função.

Você std :: córregos já móvel por meio de referência rvalue ou faz o atual biblioteca implementação falta alguma coisa?

Foi útil?

Solução

Na atual g ++ svn, suporte de referência rvalue ainda não foi adicionado ao córregos. Eu suspeito acrescentando que não será muito difícil e como sempre com software de código aberto, patches são, tenho certeza, bem-vindo!

Outras dicas

Depois de uma rápida investigação ele sai que a referência rvalue apoio não foi adicionado ainda de córregos.

Para retornar um objeto não-copiável de uma função de fato é suficiente para implementar o movimento construtor como segue:

struct noncopyable
{
    noncopyable()
    {}

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

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

Tal construtor é suposto para transferir a propriedade para o novo objeto de deixar o que está sendo transmitido em um estado padrão.

Dito isto, é possível retornar um objeto a partir de uma função desta forma:

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

Enquanto std :: fluxo não suporta construtores movimento parece que os contêineres STL enviados com gcc 4.3.2 não oferecem suporte a ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top