流的唯一指针

时间:2013-05-04 15:53:43

标签: c++ c++11 iostream move-semantics unique-ptr

#include <memory>
#include <istream>

typedef std::unique_ptr<std::istream> myType;

class myClass{

    myType myStream;
public:

    myClass(myType a_stream){
        myStream = std::move(a_stream); //compiler error
    }

};

为什么我不允许移动新创建的流?据我所知,流不是可复制的,但可以移动。我错过了什么吗?独特的指针特别适用于不可复制的对象,至少理论上是这样。

编译错误

 no match for 'operator='

2 个答案:

答案 0 :(得分:1)

您的代码为我编译。我认为没有错。

答案 1 :(得分:1)

构造函数的参数是 by-value - 你必须使它成为 by-reference 。使用 by-value 时,在使用构造函数时,对象需要复制。好的,你使用unique_ptr,但它仍然被复制到只能被移动的地方。

所以,试试这样:

myClass(myType &a_stream){
    myStream = std::move(a_stream); //compiler error
}

或者甚至

myClass(myType &&a_stream){
    myStream = std::move(a_stream); //compiler error
}

这是 by-reference 然后在发生使用的地方没有副本。

虽然,我发现你在move的地方收到错误很奇怪,所以我可能错了。