Old C++ libraries suchas Microsoft's MFC followed the misguided "double construction" approach, where constructors must initialize the object to an empty state, and then you have to call Create() or Init() to actually make the object usable.
There are unfortunately many #Cpp developers who still believe this is a good idea. The main motivation is that constructors cannot return an error.
I argued that exceptions are bad, but throwing is the only way to return an error from a constructor.