GNU gcc 4.3部分支持即将推出的c ++ 0x标准:在rvalue引用的已实现功能中。通过右值引用,应该可以移动不可复制的对象或从函数返回它。
std :: streams是否已通过右值参考移动,或者当前的库实现缺少什么?
答案 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容器似乎已经支持它了。