以下是来自其他人的c ++教程的自定义异常类:
class MyException : public std::exception {
public:
MyException(const std::string message) : m_message(message) { }
~MyException() throw() { }
const std::string what() const throw() { return m_message.c_str(); }
private:
std::string m_message;
}
我得到了大部分内容,除了" throw()"就在析构函数旁边..
是否意味着每当异常类被破坏时都会调用throw()。??
答案 0 :(得分:4)
这意味着析构函数不应该抛出任何异常。如果它试图抛出一个,程序将调用std::terminate
(这几乎肯定会使程序崩溃)。请注意,并非所有编译器都能正确实现此行为(最值得注意的是,VC ++从声明为throw()
leads to unspecified behavior的析构函数中抛出。)
请注意,C ++ 11已弃用异常规范而不支持noexcept,并且不应再使用(good reasons)。在C ++ 11中,析构函数是隐式noexcept。
答案 1 :(得分:2)
这是一个允许函数抛出的声明。在这种情况下,没有。
请参阅http://en.cppreference.com/w/cpp/language/except_spec
如果您没有在throw()
中列出异常类型,并且稍后尝试从该函数中抛出一个异常类型,则会引发std::unexpected
。
如果throw()
被忽略,那么可能会抛出任何异常。