LINUX.ORG.RU

Как правильно наследовать от std::exception ?


0

0

Есть несколько классов исключений , чтоб не разводить
несколько "catch-ей" решил унаследовать их от std::exception
и перехватывать как ссылку на родителя .
Напр.

#include <exception>
#include <iostream>

class my_exception:public std::exception{
public:
my_exception(const char* str)throw():error_message(str){}
virtual ~my_exception()throw(){}
virtual const char* what()throw(){return error_message.c_str();}
private:
std::string error_message;
};


int main()
{
try{
throw my_exception("MY_EXCEPT");
}catch(std::exception& err){
std::cout<<err.what()<<std::endl;
return 0;
}
}


метод what() возвращает название класса , в моём случае
"12my_exception" независимо от error_message.
Какая сигнатура должна быть у what() ?
Заранее спасибо .

★★★

Re: Как правильно наследовать от std::exception ?

это должен быть константный метод:

virtual const char* what() const throw()

GPFault ★★ ()

Re: Как правильно наследовать от std::exception ?

И лучше убери throw() с конструктора, у тебя там может вылететь исключение, если памяти не хватит, и всё молча грохнется.

Legioner ★★★★★ ()

Re: Как правильно наследовать от std::exception ?

почему просто не использовать std::runtime_error?

fghj ★★★★★ ()

Re: Как правильно наследовать от std::exception ?

>почему просто не использовать std::runtime_error?

Есть пара классов исключений , которым я передаю
статус ошибки из сишных функций.

kitov ★★★ ()

Re: Как правильно наследовать от std::exception ?

>И лучше убери throw() с конструктора, у тебя там может вылететь исключение, >если памяти не хватит, и всё молча грохнется.

Ок

kitov ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.