Global objects and objects declared in a namespace scope are constructed before main() starts. The implementation runs special startup code that constructs such objects (including cin and cout) and performs additional initializations before main() actually starts. Because the memory these objects allocate is not released before main() exits, some utilities and debugging tools mistakenly report that these objects cause memory leaks. You don’t have to worry. The memory allocated by cin, cout and similar objects doesn’t really leak; it’s released when these objects are destructed, which takes place after main() has exited.