2008-11-04 11 views
3

GNU gcc 4.3 частично поддерживает предстоящий стандарт C++ 0x: среди реализованных функций используется ссылка rvalue. С помощью ссылки rvalue можно перемещать не скопируемый объект или возвращать его из функции.Являются ли std :: streams уже движимыми?

Имеются ли std :: streams уже перемещаемые с помощью ссылки rvalue или у текущей реализации библиотеки нет чего-то?

ответ

2

В текущем g ++ svn поддержка ссылок rvalue еще не добавлена ​​в потоки. Я подозреваю, что это не будет слишком сложно и, как всегда, с открытым исходным кодом, патчи, я уверен, приветствуются!

1

После быстрого расследования выяснилось, что поддержка rvalue еще не добавлена ​​в потоки.

Чтобы вернуть не-Copyable объекта из функции действительно достаточно реализовать конструктор двигаться следующим образом:

struct noncopyable 
{ 
    noncopyable() 
    {} 

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

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

Такой конструктор должен передать право собственности на новый объект, оставляя один передается в состоянии по умолчанию.

Тем не менее, можно вернуть объект из функции таким образом:

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

Хотя станд :: поток не поддерживает перемещение конструкторов, кажется, что STL контейнеры, поставляемые с GCC 4.3.2 делать уже поддерживают его.