指向流的唯一指针
Unique pointer to stream
#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
的地方,所以我可能是错的。
你的代码为我编译。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 如何更改唯一指针向量的可见性
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++尝试深度复制唯一指针时出现内存访问冲突
- 使用 RTTI 克隆唯一指针的向量
- 为什么我无法创建唯一指针
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 将唯一指针的指针传递给采用双指针的函数
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- C++唯一指针的向量
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 指向基类的唯一指针
- 添加要映射的对象的唯一指针
- 智能指针(唯一指针)和引用
- 唯一指针是否在堆或堆栈上分配内存?
- 尝试设置唯一指针布尔数组的值时BAD_ACCESS错误
- 使用唯一指针调用函数会使我的程序崩溃
- 将唯一指针插入std::映射