-1
#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='
4

2 回答 2

1

你的代码为我编译。我看不出有什么问题。

于 2013-05-04T15:56:48.507 回答
1

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

所以,试试这样:

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

甚至可能

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

这是引用然后在使用的地方没有副本。

虽然,我觉得你在 的地方得到错误很奇怪move,所以我可能是错的。

于 2013-08-25T09:21:57.873 回答