Ранее на этой неделе я опубликовал еще два вопроса об исключениях и о том, почему моя программа не обрабатывает исключения.Я «разделил» мою программу из ненужного кода, и вот она:
#include <string>
#include <stdexcept>
#include <iostream>
class some_class
{
public:
some_class(const some_class &);
some_class(const char *);
std::string m_id;
};
some_class::some_class(const char *p_id) :
m_id(p_id)
{
}
some_class::some_class(const some_class &p_that) :
m_id(p_that.m_id)
{
}
extern some_class return_a_struct(const char *p_id);
int run()
{
some_class l = return_a_struct("john");
throw std::runtime_error("something bad happened");
return 0;
}
extern "C" int main(int, char **)
{
try
{
run();
}
catch(const std::exception &p)
{
std::cout << p.what() << std::endl;
}
return 0;
}
some_class return_a_struct(const char *p_id)
{
return some_class(p_id);
}
Вывод должен быть таким:,
В run () я вызываю функцию, которая возвращает some_class.Возвращенный объект затем копируется в объект, которому я его назначаю.Все идет нормально.Но затем я выкидываю исключение, и программа никогда не достигает обработчика catch в функции main.Вылетает следующее сообщение:
This application has requested the Runtime to terminate it in an unusual way
Please contact the application's support team for more information.
Если я пропущу вызов return_a_struct (), этого не произойдет.
Вопрос: это ошибка в gcc (часть последней версии MinGW, работающей в Windows 7), или я что-то делаю не так.Есть ли обходные пути?
GCC-опции:
gcc -fexceptions -g3 test_case.cpp -l libstdc++ -o test_case.exe