移动是否分配了 std::fstream 关闭原始流
Does move assign an std::fstream close the original stream
从 c++11 开始,我们可以将分配一个std::fstream
对象移动到另一个对象,但我找不到说明如果fstream
对象已经与文件关联会发生什么的文档(is_open()==true
)。
所以我的问题是,在下面的代码中,File1.txt
是否会正确关闭,或者我是否必须手动关闭它。如果我必须手动执行此操作,如果我不这样做会发生什么?
std::fstream file("File1.txt");
file = std::fstream("File2.txt"); //will this implicitly call file.close()?
fstream
对象的移动赋值将导致其关联filebuf
的移动赋值。 该文档非常清楚地表明,首先关闭旧文件(好像file.rdbuf()->close()
不是file.close()
):
basic_filebuf& operator=(basic_filebuf&& rhs);
- 效果:调用
this->close()
然后从rhs
中移动分配。在移动分配之后,*this
具有从rhs
构造的移动时将具有的可观察状态。- 返回:
*this
.
basic_fstream& operator=(basic_fstream&& rhs);
- 效果:移动从基
*this
和相应的成员中分配基rhs
。- 返回:
*this
.
(这是n4527草案中的措辞,至少自n3485以来保持不变)
由于实际的文件相关机制"隐藏"在相应的缓冲区中(流实际上主要提供格式化 IO),因此您应该查看std::basic_filebuf
文档:
首先调用 close() 关闭关联的文件,然后移动 RHS 的内容 *这:放置和获取缓冲区,相关的 文件、区域设置、打开模式、is_open标志和任何其他状态。 移动后,rhs 不与文件关联,rhs.is_open() == 假。
从 http://en.cppreference.com/w/cpp/io/basic_filebuf/operator%3D 复制
相关文章:
- 在fstream期间忽略空行
- 将浮动的heightmap数组导出为16位原始值
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 使用fstream对txt文件中的数字进行循环
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何将原始字节附加到 std::vector?
- 从堆栈分配的原始指针构造智能指针
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 将unique_ptr分配给原始指针
- 使 std::fstream 写入文件末尾,但从头开始读取
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 从原始字节解码协议缓冲区(以 C++为单位)
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 移动是否分配了 std::fstream 关闭原始流
- 原始读取带有 fstream 的引导扇区