I would encourage everyone to take a look at the Google C++ style Guide[1]. Most of the complaints are addressed in that article. Constructors can only signal errors through exceptions, so Google C++ allows only basic initialization in the constructor -- all real work is done in an explicit Init() method which can signal an error. I believe the guide addresses the posters other concerns too.
In general, the Google C++ style guideline is a very good resource for writing consistently good C++.
[1] https://google-styleguide.googlecode.com/svn/trunk/cppguide....