Я не уверен, что это проблема с компилятором, или если я делаю что-то неправильно. Я использую компилятор Visual Studio 2013.
У меня есть класс, в котором мне нужно получить значительное количество ресурсов в моем списке инициализаторов конструктора, большинство из которых могут генерировать исключение. Я завернул список инициализаторов членов в блоке try функции и поймал там исключение. Но моя программа все равно прерывается, хотя предложение catch не перебрасывает исключение. Мне не разрешено публиковать фактический код. Поэтому я воспроизвел проблему с этим эквивалентным демо-кодом. Может кто-то, пожалуйста, помогите мне в этом?
#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;
}
При выполнении этого кода я получаю предупреждение о Windows: "abort() был вызван". Поэтому я предполагаю, что система рассматривает это как неперехваченное исключение и вызывает terminate().
С другой стороны, если я завершаю конструкцию объекта в main() в блоке try-catch, тогда исключение поймается правильно, и программа завершается нормально.
Может кто-нибудь, пожалуйста, скажите мне, что я здесь делаю что-то не так?