I don't do anything in the default constructor or destructor for this very reason. I use the constructor initialization lists to do basic variable initialization (NULL for pointer, 0 for int, etc) and then I add init() and cleanup() methods for each class that I implement so that I can determine whether or not initialization or cleanup has been successful.
I personally don't use exception handling and prefer that methods return success/failure indicators... I use either true/false for simple success/failure and use enums if I need to return different success/error values.
Hope that helps.
Jeff
Bookmarks