In what cases and why is this necessary:
class ios_base::Init {
static int init_cnt; // internal static counter (for exposition only)
public:
Init();
It's a workaround for the static initialization order fiasco. Essentially, if you want to use the global stream objects from a static initializer, you can call this to ensure that they're all constructed in time. Runtimes I'm familiar with already do this properly, but technically speaking that's not guaranteed.
(Note also that as of C++11, it is guaranteed.)