Destructors are used mostly for clean-up operations, adding any seriouse logic to object's destrutor is avoided. One reason is that the logic of object's destruction can be rather complex and can depend on success of failure of destorying of it's aggregates. Handling errors and such complex relations in dtor without exception handling is nearly impossible. Instead, all such code is put into virtual methods, eg. wxPMDocument::Close() or wxPMService::Stop(), which tell about success/failure by returning boolean value.