Domanda

GNU gcc 4.3 supporta parzialmente il prossimo standard c ++ 0x: tra le funzionalità implementate il riferimento al valore. Tramite il riferimento al valore dovrebbe essere possibile spostare un oggetto non copiabile o restituirlo da una funzione.

I flussi std :: streams sono già mobili mediante riferimento al valore rvalore o manca l'implementazione della libreria corrente?

È stato utile?

Soluzione

Nell'attuale sv ++ g ++, il supporto di riferimento rvalue non è stato ancora aggiunto ai flussi. Ho il sospetto che aggiungerlo non sarà troppo difficile e come sempre con il software open source, le patch sono, sono sicuro, il benvenuto!

Altri suggerimenti

Dopo una rapida indagine viene fuori che il supporto riferimento valore non è stato ancora aggiunto agli stream.

Per restituire un oggetto non copiabile da una funzione è infatti sufficiente implementare sposta costruttore come segue:

struct noncopyable
{
    noncopyable()
    {}

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

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

Si suppone che tale costruttore trasferisca la proprietà sul nuovo oggetto lasciando quello che viene passato in uno stato predefinito.

Detto questo, è possibile restituire un oggetto da una funzione in questo modo:

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

Sebbene std :: stream non supporti i costruttori di spostamento, sembra che i contenitori STL forniti con gcc 4.3.2 lo supportino già.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top