Sam*_*Sam 5 c++ destructor exception
在阅读Hurb Sutter的"More Exceptional C++"时,我偶然发现了以下代码:
// Example 19-5: Alternative right solution
//
T::Close()
{
// ... code that could throw ...
}
T::~T() /* throw() */
{
try
{
Close();
}
catch( ... ) { }
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,这不是一个好主意.因为,如果由于异常而在堆栈展开期间调用T析构函数,然后Close()抛出异常,那么这将导致调用Terminate().
有人可以对此有所了解.提前致谢.
我的理解是,这不是一个好主意.因为,如果由于异常而在堆栈展开期间调用T析构函数,然后Close()抛出异常,那么这将导致调用Terminate().
在try- catch块,这正是防止.代码:
try
{
Close();
}
catch( ... ) { }
Run Code Online (Sandbox Code Playgroud)
将捕获抛出的任何异常Close并忽略它们.因此析构函数不会抛出任何异常,这可能导致调用终止函数.
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |