指向流的唯一指针

Unique pointer to stream

本文关键字:唯一 指针      更新时间:2023-10-16
#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='

构造函数的参数是按值——你必须使它按引用。对于按值,在使用构造函数时需要复制对象。好的,你使用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的地方,所以我可能是错的。

你的代码为我编译。