Составил из кода пример непонятной мне работы try/catch
По непонятной мне причине catch не срабатывает, и я получаю:
rilium@cl-t063-361cl:/tmp$ g++ test2.cpp && ./a.out
terminate called after throwing an instance of 'spectra::exceptions::allocation_error'
Aborted
Хотя если поменять catch(std::exception& ex), на
catch(std::bad_alloc& ex) или catch(spectra::exceptions::spectra_exception& ex)
Все работает как я и ожидаю.
Что не так? И как правильно сделать такую модель работоспособной?
#include <iostream>
#include <exception>
#include <new>
namespace spectra
{
namespace exceptions
{
class spectra_exception : public std::exception
{
};
class allocation_error : public std::bad_alloc, public spectra::exceptions::spectra_exception
{
public:
virtual const char* what() const throw();
};
const char* allocation_error::what() const throw() { return "Not enough memory"; }
}
}
int main()
{
try
{
throw(spectra::exceptions::allocation_error());
}
catch(std::exception& ex)
{
std::cout << "Error: " << ex.what() << std::endl;
}
}
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от dilmah
Ответ на:
комментарий
от placement_new
Ответ на:
комментарий
от dilmah
Ответ на:
комментарий
от placement_new
Ответ на:
комментарий
от dilmah
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Валится на throw (2005)
- Форум Как правильно наследовать от std::exception ? (2007)
- Форум Исключения в С++ (2010)
- Форум вопрос по исключениям в с++ (2005)
- Форум C++/exceptions - деление на ноль не ловиццо, почему? (2006)
- Форум Багофича эксепшенов с++ ? (2013)
- Форум C++ exception object constructor. «Не вызывается» (2008)
- Форум [C++] [компиляторы] Множественное наследование (2011)
- Форум C++ iostream::failbit (2005)
- Форум boost.asio, boost.serialization (2010)