【发布时间】:2013-04-01 18:19:55
【问题描述】:
我在写入 ofstream 指针时遇到问题,这非常令人困惑,因为我真的看不到任何丢失的东西了。请注意,这是此问题的后续内容: C++ vector of ofstream, how to write to one particular element
我的代码如下:
std::vector<shared_ptr<ofstream>> filelist;
void main()
{
for(int ii=0;ii<10;ii++)
{
string filename = "/dev/shm/table_"+int2string(ii)+".csv";
filelist.push_back(make_shared<ofstream>(filename.c_str()));
}
*filelist[5]<<"some string"<<endl;
filelist[5]->flush();
exit(1);
}
这不会向输出文件写入任何内容,但会创建 10 个空文件。有人知道这里可能出了什么问题吗?
编辑:我进行了一些进一步的测试。我让代码在没有 exit(1) 的情况下运行直到完成,在所有文件上运行,直到所有回调完成。原来有些文件不是空的,而其他应该有数据的却是空的。
有足够的磁盘空间,而且我知道我的文件描述符超出了所需的数量。有什么解释为什么有些文件可以正确写入,而有些则不能?
【问题讨论】:
-
为什么是
std::vector<shared_ptr<ofstream>>而不是简单的std::vector<std::ofstream>? -
@LihO 你不能复制一个 ofstream 所以你不能直接做一个 ofstreams 的向量。使用 shared_ptr 而不是原始指针可以节省您手动删除资源的时间。还有其他成本惩罚较低的方法,但对于包含 10 个项目的向量,这并不重要。
标签: c++ pointers flush ofstream