#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='
答案 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
的地方收到错误很奇怪,所以我可能错了。