struct except
{
except( const char * key )
: m_key( key )
{
}
const char * key() { return m_str; }
private:
const char * m_str;
};
void throwing_function( const std::string & param )
{
throw except( param.c_str() );
}
考虑以下代码段:如果从key()
块的范围发出,对异常的成员函数catch
的调用是否有效?
答案 0 :(得分:2)
这取决于param
是什么引用。如果它是对全局字符串的引用,则位于堆栈之上,然后是catch
,或者是动态分配而不是从堆栈展开中销毁,它将起作用,否则该字符串将被破坏时间你catch
。
所以,如果从那个解释中没有明确说明:不要这样做。