singleton, it's much easier/safer.
There are languages in which the initialization order of global objects is not defined (C++ for example), in the end, if we have two global object in different files, and if some of them in the constructor calls methods on the second object, we have exactly 50% receive the error. Comes to the aid of singleton.
Improves citability code. Sometimes not clear where this global object (extends it by connecting a header file), you have to scour the headers and learn that as a Yes (that is, if your code reads another programmer), and you wrote in the constructor something like foo = Foo::getInstance();, once it becomes clear.
Finally, it is more consistent with the principle of the PLO, when everything is hidden in the classes/structures, and there is nothing outside of them (no global functions or variables).