Вы можете позволить деструктору выполнять свою работу. Но, как и в случае любого объекта RAII, могут быть случаи, когда вызов close вручную может иметь значение. Например:
#include <fstream>
using std::ofstream;
int main() {
ofstream ofs("hello.txt");
ofs << "Hello world\n";
return 0;
}
записывает содержимое файла. Но:
#include <stdlib.h>
#include <fstream>
using std::ofstream;
int main() {
ofstream ofs("hello.txt");
ofs << "Hello world\n";
exit(0);
}
нет. Это редкие случаи, когда процесс внезапно завершается. Процесс сбоя может сделать подобное.