В языке C++ существует несколько способов открытия и работы с файлом. Однако RAII-подход очень популярен, так как destruktor заботится о освобождении памяти.RAII с файловым потоком
Но как насчет закрытия фильтра? Насколько я знаю, деструктор должен закрыть файл в любом случае. Однако деструктору также не разрешено исключать какие-либо исключения. Поэтому, если я не закрываю свой поток, и он разрушается в конце блока, я могу потерять информацию об ошибке, которая может возникнуть при закрытии.
Я считаю, что это правильно? Несмотря на подход RAII, я должен всегда закрывать свои потоки?
Пример:
{
std::ofstream ofs;
ofs.open ("test.txt");
ofs << "blablabla";
//do i need the following?
ofs.close();
}
Объект файлового потока должен быть разрушен (и, следовательно, закрыт, без исключений), когда объект, в котором он содержится, разрушен. Не нужно явно закрывать файл в деструкторе. –
Нет, вам не нужно вручную '.close()', это _whole point_ of RAII. – emlai