I agree, but only if the fstream object doesn't go out of scope before opening another. There's no need to close the stream if this is your code:
int main(int argc, char **argv)
{
for (int i = 1; i < argc; i++) {
fstream file(argv[i]);
if (!file) continue;
// Process the file
}
}
There's no way that you can have more than one stream open at the same time because the destructor is called after each iteration of the loop. The destructor will flush unwritten output and close the stream properly. The only reason you would have for calling close explicitly is if you reuse the fstream object for another file, have enough fstream objects to reach an implementation limit of open files, or the fstream object will be unused, but still in scope for a while after processing the file.
But if you like the extra typing and redundant code, who am I to stop you? Some people prefer to close their file streams explicitly as a matter of style.