У меня возникли проблемы с записью указателя на поток, и это довольно озадачивает, поскольку я действительно больше не вижу ничего, чего не хватает. Обратите внимание, что это является продолжением от этого вопроса: C++ vector of ofstream, how to write to one particular elementC++ указателя потока не удается записать на диск
Мой код выглядит следующим образом:
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 пустых файлов. Кто-нибудь знает, что может быть здесь неправильно?
EDIT: Я провел еще несколько испытаний. Я разрешаю код работать без выхода (1) до завершения, по всем файлам, пока все обратные вызовы не будут завершены. Оказывается, что некоторые файлы не пустые, а другие, у которых должны быть данные, пустые.
Существует много места на диске, и я знаю, что у меня есть больше дескрипторов файлов, чем это необходимо для этого. Любое объяснение того, почему некоторые файлы были написаны правильно, а другие нет?
Почему 'std :: vector>' вместо простого 'std :: vector '? –
LihO
@LihO Вы не можете копировать поток, поэтому вы не можете напрямую выполнять вектор потоков. Использование shared_ptr вместо необработанных указателей позволяет вам вручную удалять ресурсы. Существуют и другие подходы, которые имеют более низкие штрафные санкции, но для вектора из 10 предметов это не имеет большого значения. – Pyrce