Нет. fstream
- это объект RAII , он закрывается автоматически в конце области. А это значит, что он в конечном итоге для вас закрыт.
Однако вы можете закрыть его вручную, явно вызвав close
или просто вложив его в область видимости, используя фигурные скобки {}
.
Другая ситуация возникает, если вы хотите проверить, удалось ли закрыть файл. Чем вы также должны вызвать его вручную. Это полезно, если вы хотите гарантировать точку в коде, где файл написан полностью.
Также не забудьте проверить cppreference для получения дополнительной информации.
Страница man linux для close
гласит следующее, что также интересно прочитать
Не проверка возвращаемого значения close () является распространенной, но, тем не менее, серьезной ошибкой программирования. Вполне возможно, что ошибки в предыдущей операции write (2) сначала сообщаются в финальном закрытии (). Не проверка возвращаемого значения при закрытии файла может привести к потере данных без вывода сообщений. Это особенно заметно в случае NFS и дисковой квоты.
Успешное закрытие не гарантирует успешного сохранения данных на диск, поскольку ядро откладывает запись. Обычно файловая система не очищает буферы при закрытии потока. Если вам необходимо убедиться, что данные физически хранятся, используйте fsync (2). (Это будет зависеть от аппаратного обеспечения диска на данный момент.)
Возможно, неразумно закрывать файловые дескрипторы, когда они могут использоваться системными вызовами в других потоках в том же процессе. Поскольку файловый дескриптор может быть повторно использован, существуют некоторые неясные условия гонки, которые могут вызвать непреднамеренные побочные эффекты.
Я не уверен насчет ситуации с флешем на окнах. Может быть, кто-то может добавить эту информацию.
Далее close()
гарантирует исключение при сбое, которое вы можете перехватить и обработать.