As to which one to call, unless the filename is going to be passed to various functions and therefore better off being assigned to a variable first, I'd suggest the initialization ctor
Yes agreed. In fact, as a general principle, the further away ofstream is declared in the program from actual use the more sense it makes to use the default ctor rather than using the initialization ctor and then having to re-assigning it later