Являются ли std :: streams уже подвижными? - PullRequest
3 голосов
/ 04 ноября 2008

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

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

Ответы [ 2 ]

2 голосов
/ 04 ноября 2008

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

1 голос
/ 05 ноября 2008

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

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

struct noncopyable
{
    noncopyable()
    {}

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

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

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

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

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

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

...