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() ?
Заранее спасибо .

★★★
Ответ на: комментарий от GPFault

Спасибо тебе добрый человек :-)

kitov ★★★
() автор топика

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

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

сразу и не заметил что ты о конструкторе говорил, подумал что о what

aton
()
Ответ на: комментарий от fghj

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

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

kitov ★★★
() автор топика
Ответ на: комментарий от cobold

>Странный код.

Что именно ?

kitov ★★★
() автор топика
Ответ на: комментарий от Legioner

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

Ок

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