C++: How to catch exceptions thrown from constructors? -


i have class, call a, constructor takes input arguments, , may throw exception if incompatible constructing object. in main code, construct object of type a follows:

a my_obj(arg1,arg2,arg3); 

and use it. if constructor fails , throws exception, execution of program terminated after printing out 'unhandled exception' message.

i, however, give user more information in case , tell him/her why exception has been thrown. so, need way catch exception.

to end, 1 possibility enclose whole code, starting declaration of my_obj till end of program in try block , catch exception afterwards:

try {     my_obj(arg1, arg2, arg3);     // ...      // 100 other lines of code being executed if my_obj created  } catch (std::exception& e) {     // print user-friendly error message , exit } 

but looks me bit of 'overkill'. since no other exceptions thrown in remaining 100 lines. there other nicer way accomplish this?

you can abstract object construction function catches exception:

template<typename... args> make_a(args&&... args) {     try {         return a(std::forward(args)...);     }     catch (std::exception& e) {         // print user-friendly error message , exit         ...         std::exit(exit_failure);     } }  // ... in actual code: my_obj = make_a(arg1, arg2, arg3); 

the above makes use of fact program exiting if construction fails. if requirement continue running, function return std::optional<a> (or boost equivalent if don't have access c++17.)


Comments

Popular posts from this blog

php - Vagrant up error - Uncaught Reflection Exception: Class DOMDocument does not exist -

vue.js - Create hooks for automated testing -

Add new key value to json node in java -