代码之家  ›  专栏  ›  技术社区  ›  Nicola Bonelli

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

  •  3
  • Nicola Bonelli  · 技术社区  · 17 年前

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

    std::streams已经可以移动了吗 通过右值引用 或者当前的库实现缺少什么?

    2 回复  |  直到 17 年前
        1
  •  2
  •   Chris Jefferson    17 年前

    在当前的g++svn中,右值引用支持尚未添加到流中。我怀疑添加它不会太困难,而且与开源软件一样,我相信欢迎补丁!

        2
  •  1
  •   Nicola Bonelli    17 年前

    经过快速调查,发现 右值引用 流中尚未添加支持。

    要从函数返回不可复制的对象,只需实现 移动构造函数 如下:

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