Mik*_*eMB 10 c++ move filestream
从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()?
Run Code Online (Sandbox Code Playgroud)
移动分配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);
- 效果:Move
*this从基础和相应成员中分配基础和成员rhs.- 返回:
*this.
(这是n4527草案中的措辞,至少从n3485开始没有变化)
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |