Quote Originally Posted by mustermeister View Post
You're always free to do nothing in your constructors, in particular in your default ones, but that's bad programming practice and contrary to the spirit of the language. The reason why C++ has special member functions called constructors is - surprise, surprise! - to construct the object. Which means initializing it, to use oldfashioned terminology. When an object has been constructed it should be ready to use. Don't break the unwritten laws of the language.
I think it is an even worse idea to treat a general principle as a law. Yes, the reason there are special members called constructors is to construct the object, and obviously these work well in most cases, but there is also freedom to deal with things differently if appropriate.* And "ready to use" could mean a lot of things -- all of those meanings will be qualified "ready to use properly", as in, ready to use like this or like that, but "obviously I didn't mean used improperly". Eg, an empty vector<string> is not "ready to use" in sorting; you have to push some data into it first (after the constructor call).

* If the authors had intended that to be impossible, it would be.