Constructor as a function try block - Exception aborts program
c++, c++11
Solution
There's a relevant gotw
http://gotw.ca/gotw/066.htm
Basically even if you don't throw in your catch block, the exception will automatically be rethrown
If the handler body contained the statement "throw;" then the catch block would obviously rethrow whatever exception A::A() or B::B() had emitted. What's less obvious, but clearly stated in the standard, is that if the catch block does not throw (either rethrow the original exception, or throw something new), and control reaches the end of the catch block of a constructor or destructor, then the original exception is automatically rethrown.
Problem
I am not sure if this is a issue with the compiler or if I am doing something wrong. I am using Visual Studio 2013 compiler. I have a class where I need to acquire significant amount of resources in my constructor initializer list most of which can throw an exception. I wrapped up the member initializer list in a function try block and caught the exception there. But my program still aborts even though the catch clause doesn't re-throw the exception. I am not allowed to post the actual code. So I have reproduced the issue with this equivalent demo code. Can someone please help me address this? ``` #include <iostream> using namespace std; class A{ public: A() try : i{ 0 }{ throw 5; } catch (...){ cout << "Exception" << endl; } private: int i; }; int main(){ A obj; } ``` On executing this code I get a windows alert "abort() has been called". So I guess the system is treating this as an uncaught exception and calling terminate(). On the other hand if I wrap the construction of the object in main() in a try-catch block then the exception is caught properly and the program terminates normally. Can someone please tell me if I am doing something wrong here?