std :: streams已经可以移动吗?

时间:2008-11-04 15:55:27

标签: c++ gcc stream c++11 rvalue

GNU gcc 4.3部分支持即将推出的c ++ 0x标准:在rvalue引用的已实现功能中。通过右值引用,应该可以移动不可复制的对象或从函数返回它。

std :: streams是否已通过右值参考移动,或者当前的库实现缺少什么?

2 个答案:

答案 0 :(得分:2)

在当前的g ++ svn中,尚未将rvalue引用支持添加到流中。我怀疑添加它并不会太困难,而且与开源软件一样,补丁是,我敢肯定,欢迎!

答案 1 :(得分:1)

经过快速调查后发现右值参考支持尚未添加到流中。

要从函数中返回不可复制的对象,实现移动构造函数就足够了,如下所示:

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不支持移动构造函数,但gcc 4.3.2附带的STL容器似乎已经支持它了。